dbgrid怎么获取当前记录值?

javagxc 2010-05-17 04:29:29
我用DBGrid,ADODataSet和DataSourse三个组件读取数据库的一个表,
数据读出来了,现在想实现如下功能:
可以任意编辑表格内的任意记录,当光标离开这条记录时,获取当前记录的值,并把这条记录发送(TCP/UDP)到另外一个程序。
该怎么获取dbgrid中当前记录的值啊,用什么事件啊。菜鸟发问,请大虾帮忙,不胜感激!
...全文
891 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
javagxc 2010-05-20
  • 打赏
  • 举报
回复
最后的问题没解决呢,帖子老沉,结贴给分吧,谢谢大家啦
javagxc 2010-05-19
  • 打赏
  • 举报
回复
等待高人中......
scfanxzq 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 javagxc 的回复:]
当前值已经可以获取,获取方法如下:
DBGrid1.DataSource.Dataset.Fields[dbgrid1.Columns.Grid.SelectedIndex].AsString;


目前面临的最后一个问题是,我想光标离开的时候获取这个值,不管这个值有没有编辑过,要用什么事件啊
用oncolexit只能解决在同一行切换光标的问题,如果光标在不同行的同一列切换就失去作用了。……
[/Quote]
换一种思路:
准备条件:定义两个全局变量,并且在窗口创建期初始化。
1、当单元格点击的时候(OnCellClick),判断当前的列值和其中一个全局变量是否一致,判断当前的数据记录的值和另一个全局变量是否一致。
2、如果不一致,判断全局变量是否是初始值,如果是初始值,那么把当前的列和记录的值分别赋给两个全局变量。如果不是初始值,说明单元格已经改变,那么把全局变量作为你要的数据保存起来供后面使用。
3、把全局变量修改为当前的列和记录值。
scfanxzq 2010-05-19
  • 打赏
  • 举报
回复
你的绑定方法是不是这样的?
DBGrid->DataSoure->Query(Table)?

那不用考虑什么当前行了,你在dbGrid里面的onCellChange这之类的事件里面,直接写
Query(Table).fieldbyname('字段名').asstring;(……)

如果要深究的话,就是当你在DBGrid中选中一行的时候,数据集中的浮标就已经指到了数据集对应的行中,所以你不用做任何查找或者移动浮标的操作,直接取数据集中字段的值就可以了。

把你要的字段的值取出来之后,保存到变量里面,发送就ok
andylist 2010-05-18
  • 打赏
  • 举报
回复
说得好像很深澳,事实上DataSource好像早有此功能。
xjq2003 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
这根grid无关,当你选中一条记录时,数据集就定位到这条数据上了,你只需要读取数据集中的数据就行了
[/Quote]
edit1.text:=dbgrid.datasource.dataset.fieldbyname('字段').asString;
huangheguyun 2010-05-18
  • 打赏
  • 举报
回复
直接读取数据集中的数据
javagxc 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
这根grid无关,当你选中一条记录时,数据集就定位到这条数据上了,你只需要读取数据集中的数据就行了
[/Quote]

要怎么读取呢?我是菜鸟!
javagxc 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hongss 的回复:]
你总要确定下,你要的是哪里的“当前值”吧?

你用什么操作去取“当前值”?鼠标点?
[/Quote]
鼠标点或者->、<-都可以的。
javagxc 2010-05-18
  • 打赏
  • 举报
回复
当前值已经可以获取,获取方法如下:
DBGrid1.DataSource.Dataset.Fields[dbgrid1.Columns.Grid.SelectedIndex].AsString;


目前面临的最后一个问题是,我想光标离开的时候获取这个值,不管这个值有没有编辑过,要用什么事件啊
用oncolexit只能解决在同一行切换光标的问题,如果光标在不同行的同一列切换就失去作用了。用什么控件可以行列切换时都能获取值啊。
贝隆 2010-05-17
  • 打赏
  • 举报
回复
学习
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
zrssweet 2010-05-17
  • 打赏
  • 举报
回复
读取数据集中的数据就行了
wxf999 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
这根grid无关,当你选中一条记录时,数据集就定位到这条数据上了,你只需要读取数据集中的数据就行了
[/Quote]
是的,直接读取数据集
hongss 2010-05-17
  • 打赏
  • 举报
回复
你总要确定下,你要的是哪里的“当前值”吧?

你用什么操作去取“当前值”?鼠标点?
javagxc 2010-05-17
  • 打赏
  • 举报
回复
我想获取的值,可以是任意行任意列的,不能固定取哪一列啊,我取的时候还要判断我当前值在哪一列吗?
hongss 2010-05-17
  • 打赏
  • 举报
回复
你要的是鼠标点击那里的当前值?

比如

DBGrid1.SelectedField.DataSet.FieldValues['Date'];
bdmh 2010-05-17
  • 打赏
  • 举报
回复
这根grid无关,当你选中一条记录时,数据集就定位到这条数据上了,你只需要读取数据集中的数据就行了
guanking 2010-05-17
  • 打赏
  • 举报
回复

DataSource1的DataChange事件中处理
显示dbgrid当前记录的字段值。
DBGrid1.Datasource.Dataset.Fields[0].AsString //当前记录第一个字段值
DBGrid1.Datasource.Dataset.Fields[1].AsString //当前记录第二个字段值
DBGrid1.Datasource.Dataset.Fields[2].AsString //当前记录第三个字段值
。。。
DBGrid1.Datasource.Dataset.Fields[n].AsString //当前记录第n个字段值


winstonbonaparte 2010-05-17
  • 打赏
  • 举报
回复
onCellClick事件或是onkeypress事件都可以判斷的
varick_zhong 2010-05-17
  • 打赏
  • 举报
回复
onmousemove事件

5,916

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧