关于DBGrid的问题请教(100分)

  • 主题发起人 主题发起人 taorui810
  • 开始时间 开始时间
T

taorui810

Unregistered / Unconfirmed
GUEST, unregistred user!
在DBGrid1中,记录指针在第一条记录上,我如何得到鼠标所在行的各字段值?
如DBGrid1显示结果为
姓名 性别
1 张三 男 (记录指针在这一行)
2 李四 女
3 王五 男
4 刘六 女
5 赵七 男
现在我将鼠标指向(不是Click)第3行,我怎么得到第三行的各字段值?指向其他行,就得到该行的各字段值?请高手赐教!
 
DBGrid1.Columns.DataSet.FieldName('姓名').asString;
DBGrid1.Columns.DataSet.FieldName('性别').asString;
 
没错就是这样的,我也试过了,好好用,
 
with DBGrid1 do
begin
Columns.DataSet.FieldName('姓名').asString;
Columns.DataSet.FieldName('性别').asString;
end;
 
我试了不行啊,提示“Undeclared identifier:'DataSet'”错误
我用ADOConnection1+ADOQuery1连接数据库的
 
请高手们指教啊
 
怎么没人会啊?自己再顶一下 :)
 
在DBGrid的CellClick事件中写:
Edit1.Text:=ADOQuery1.FieldbyName('姓名').AsString;
Edit2.Text:=ADOQuery1.FieldbyName('性别').AsString;
如此,点击DBGrid中的某一行,其Edit组件会显示所在行的值。
 
我要的不是“点击”而是MOUSEMOVE啊
 
楼主要的是鼠标 移动而已,记录集指针的位置根本没有改变的情况下,如何得到鼠标所在的位置的记录集的value。帮顶,等下高手来解答
 
to NoJave 是的,我要的就是这个效果!
 
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
rh,Arow:integer;
begin
if (y-16{标题高}) mod 16{行高} > 0 then
Arow:=(y-16{标题高}) div 16{行高}+1
else Arow:=(y-16{标题高}) div 16{行高};
//DBGrid1.DataSource.DataSet.RecNo:=Arow;
label1.Caption:=inttostr(Arow);//记录行
//通过Arow动态创建一个ADOQuery去取数据;
end;
给分吧
 
DBtext或DBEdit也可以!!!简单实用。
 
to 清新空气
不对把,你那样取出来的row只是相对的,不是绝对的如果数据集在一个窗体里面显示完全,倒是可以,不弱很多的话,肯定不行.

不过可以通过dbgrid.gridcoord(x,y)取得当前鼠标所在行列M,N,然后判断跟当前的焦点行判断现对位置,然后根据adoquery.moveby属性跳到相应的记录上.我没有试验,只是一个想法.
 
to hityou
方法给你看了,你可以试试,无论你的,还是我的方法;都没办法知道当前页面的DBGrid之前有多少条记录,所以无论是我的算法还是用
label1.Caption:=inttostr(tdrawgrid(dbgrid1).Row);还是
var
gc:TGridCoord;
begin
gc:=dbgrid1.MouseCoord(x,y);
label1.Caption:=inttostr(gc.y);
它都是相对位置,如果你对右边的ScrollBar有研究的话,倒可以通过Scrollbar来算一算;
不过那样情况也挺复杂!
 
我知道可以从表格的DataLink的缓冲器里面取,我也是这么取的,不过我是写控件,从控件外面怎样取,就不清楚了。
 
to 清新空气:
我用你的方法基本上实现了,谢谢,也谢谢其他参与的同志!接分吧!
 
多人接受答案了。
 
后退
顶部