Help About Dbgrid(50分)

  • 主题发起人 主题发起人 dlover
  • 开始时间 开始时间
D

dlover

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在程序中如何读出DBGrid中指定行,指定列的数据,
例:读出DBGrid的第二列,第一行的值。取TDataSet不行,
因为DBGrid中可能作过修改(增,删).
 
取出x行,y列的值
DBGrid1.Fields[DBGrid1.Columns.Count*x+y].ASString;
DBGrid1.Fields[DBGrid1.Columns.Count*x+y].AsInteger;
etc
x,y从0开始计数。
 
Tstringgrid(dbgrid).col;
Tstringgrid(dbgrid).row;
可以读出!
也可以
在程序里:
TfriendGrid=class Tdbgrid;


 
要读,TSTRIGNGRID类似
 
1.chenke的答案是错的, 这方法100%会得到AccessViolation错误, 因为dbgrid1.fields.count=dbgrid1.columns.count

2.delphi fan2的答案是取行列号, 和要求相去甚远.

3.我个人认为: 不通过dataset没法实现
function GetGridCell(x,y: integer): string;
var
p: pointer;
begin
with dbgrid1.DataSource.DataSet do
begin
p:=GetBookmark;
First;
if MoveBy(y)<>y then
result:=''
else
result:=Fields[x].asstring;
GotoBookmark(p);
FreeBookmark(p);
end;
end;
 
不应该通过dataset实现,因为要的是未存入dataset的数据,
Another eYes的做法实际上写了数据。我觉的应该从Grid下手,
如果用CacheUpdate 的话有个Oldvalue,NewValue可以用。
 
>> 因为DBGrid中可能作过修改(增,删).
^^^^
他讲的修改是指,有些字段不显示, 或添加了其他计算段.
并且dataset中的顺序有可能不同于 DBGrid 顺序,
 
这个问题因为提问者久未来,况且各人答案和意见不能统一,
有兴趣的请大家发表一下意见。

-- by 3h
 
假设你要取第四行,第2列的数据
那么
Dbgrid1.DataSource.DataSet.first;
Dbgrid1.DataSource.DataSet.Moveby(4);
你要的数值 := Dbgrid1.Columns.Items[1].field.Value ;


 
多人接受答案了。
 
后退
顶部