如何确定DBGRID中的当前行数(100分)

  • 主题发起人 主题发起人 sprite
  • 开始时间 开始时间
S

sprite

Unregistered / Unconfirmed
GUEST, unregistred user!
要在dbgrid中显示行号 从1开始,连续的
处理了DrawColumnCell 事件,想把自增的id字段 改成显示行号
可从它的参数(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);中没法得到 当前行数
请教....
 
使用DataSet的RecNo
 
你的adodataset 的recordcount应该就是dbgrid记录的的行数,,,,,
 
我看过一个例子是用了RecNo 不过程序中我也试了

总是返回-1啊
BTW 我用的DataSet是Query
 
RecNo好象不大中,dbgrid行号与数据库记录关系不大,如果求记录序号,就使用自增字段相减
就是了
 
TStringGrid(DBGrid).RowCount //总行数
TStringGrid(DBGrid).Row //当前行数
其实以前很多贴都有这个问题,查一下就可以了,又何必自己来问呢。
 
不行啊

自增 如过做过删除 自增字段的ID 不是连续的
 
在query 中加一计算字段 dbgdid
fieldbyname('dbgdid').asinteger := abs(recno);
 
用数据集的RecNo应该可以。
 

我在DrawColumnCell 中加入了
Sender.Canvas.TextRect(Rect,Rect.Left,Rect.Top,IntToStr(TStringGrid(Sender).Row));//(TQuery(dbgBasic.DataSource.DataSet).RecNo));

序号变得很奇怪 只有在 选中得时候 相邻两个序号序号才变成下一条的序号 ???
 
lable1.caption:=dataset.recordcount;
 
DataSet.RecordCount 总行数
DataSet.RecNo 当前行数
 
增加时
i := Query.DataSet.RecordCount +1;
把i写进id 去
也就是~~~一般增加都是另一个form了哦
那就是
form1.Query.FieldByName('id').AsInteger := form1.DataSource.DataSet.RecordCount+1; hoo :)
删除时
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('select * from 你的表名 order by id');
Query.Open;
DBGrid.Update;
if conn = 0 then exit;
m:=0;
DataSource.DataSet.RecNo :=1;
for i:=1 to conn do
begin
Query.edit;
Query.FieldByName('tid').AsInteger := DataSource.DataSet.RecNo;
Query.post;
Query.Next;
m:=m+i;
end;

不要骂我啊,我是新手,这样虽然删除时会有些慢,但号排的齐啊 呵呵

实在觉得慢可以在循环里加一个进度条玩玩
ProgressBar.Position := round((m + 1) / conn * 100 - 1);
 

Similar threads

后退
顶部