急用:怎样引用dbgrid具体某行某列的值,如何自动跳到下一个单元格(60分)

  • 主题发起人 主题发起人 gunwithlove
  • 开始时间 开始时间
G

gunwithlove

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,请教一个关于dbgrid的问题(急用):
我在使用dbgrid输入数据(通过adoquery),其中有些项不能为空,因此,我想在
TForm1.DBGrid1ColExit中加入判断当前列是否为空的小程序,但我不知道怎样引用
某列的值,请多帮忙!如果能判断某行某列的输入值,则更好。我还想在一个输入格中
输入完毕后,按回车键就能自动跳到下一个单元格(如果当前格为本行最后一列,则跳到
下一行的第一列),请问怎样才能实现这个功能呢?
 
1:DBGrid1.DataSource.DataSet.Fields[DBGrid1.SelectedIndex] 好像不太对.
我没试验过.

2:在onkeypress中写如果是key = #13
if Key = #13 then //vk_return
begin
Key := #0;
{
if ActiveControl is TDbgrid then
begin
if TDBGrid(ActiveControl).SelectedIndex = dbgrdData.Columns.Count -1 then
begin
TDBGrid(ActiveControl).SelectedIndex := 0;
Perform (CM_DialogKey, VK_TAB, 0);
end
else
TDBGrid(ActiveControl).SelectedIndex := TDBGrid(ActiveControl).SelectedIndex + 1;

end
else
}
Perform (CM_DialogKey, VK_TAB, 0);
end;
 
用StringGrid实现吧。
 
谢谢三代坦克,您提供的按回车键实现的TAB功能的程序完全正确,不过能麻烦您
讲解一下吗?特别是Perform。
谢谢tanglu,我知道在stringgrid中可以通过行列来取值,就象从excel的表取值一样,不过
我的程序是基于dbgrid的,您知道在dbgrid中可以取值吗?(用来判断某个输入是否为空)
 
1。可以用DBGrid1.SelectedField,他是你当前记录的正在编辑的tfield。
 
Perform (CM_DialogKey, VK_TAB, 0);
应该是给自己发个消息吧,我也忘了。应该和sendmessage差不多。
onkeypress事件中把vk_return转化成VK_TAB,首先把key= 0,然后发个VK_TAB的消息。
if TDBGrid(ActiveControl).SelectedIndex = dbgrdData.Columns.Count -1
判断是否到了最后一个字段,到了最后就回到第一个。
www.borland.com.cn 上有这个例子。
 
不用那么麻烦。
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
dbgrid1.Perform(WM_KeyDown, vk_tab, 0);
end;

这样就可以了。
 
>>判断当前列是否为空
可以考虑给这样的字段写OnValute事件,当移动到另外一行时,事件被触发,为真时允许
移动,否则不准移动。这同时也能判断出某行某列的输入值。
 
怎样跳到下一行呢?如果下一行已经存在或不存在(按向下键新增一行)?
 
再请教一个问题,怎样获得当前所在的行和总的行数呢?
 
我在我做的MIS中处理过这类问题,字段引用可用DBGRID.FIELDS[1].ASSTRIN或ASXX取得
其值,关于跳格问题可用SELECTINDEX+1跳下一个-1,跳前一个
 
dbgrid和其关联的DATASET是同步的,如果DBGRID是最后一行,则DATASET再NEXT,就EOF了。
关于判断一些不能为空,可以用LCCC的方法,不过应该是在Tfield的onvalidate事件里,判断

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