我要管理一个表的数据,于是我采用了一个DBEdit,一个DBNavigator,一个DBGrid,3个都关联到一个DataSource,这样可以通过DBNavigator使DBEdit与DBGrid显示数据同步。我只允许编辑DBEdit,但不允许在DBGrid编辑。
但是在点击DBNavigator的添加按钮时,出现了问题。如果DBGrid有某个单元格获得焦点,点击添加按钮,会在DBGrid产生空行,也会清空DBEdit,DBGrid的新加空行的相应单元格会获得焦点。然后我想在DBEdit里面输入新数据,我点击DBEdit,DBGrid的新加的空行没有了,被下一行记录代替,此时没有单元格获得焦点。如果再次点击添加按钮,会重新生成空行并清空DBEdit,这次可以在DBEdit录入新数据,而不会出现上面的问题。
该如何解决这个问题呢?
我尝试把DBGrid的Enable设为false,可是显示不美观,垂直滚动条不可用
hahafan(注意!此人前途迷茫) ,指导在Grid的OnEnter事件加ActiveControl := nil,但是垂直滚动条还是不可用。
我尝试把DBGrid1.SelectedRows.Clear;还是无法去掉焦点。
有没有办法让DBGrid没有单元格获得焦点,但是垂直滚动条可以用,就像上面第二次点击添加按钮时的状态?
但是在点击DBNavigator的添加按钮时,出现了问题。如果DBGrid有某个单元格获得焦点,点击添加按钮,会在DBGrid产生空行,也会清空DBEdit,DBGrid的新加空行的相应单元格会获得焦点。然后我想在DBEdit里面输入新数据,我点击DBEdit,DBGrid的新加的空行没有了,被下一行记录代替,此时没有单元格获得焦点。如果再次点击添加按钮,会重新生成空行并清空DBEdit,这次可以在DBEdit录入新数据,而不会出现上面的问题。
该如何解决这个问题呢?
我尝试把DBGrid的Enable设为false,可是显示不美观,垂直滚动条不可用
hahafan(注意!此人前途迷茫) ,指导在Grid的OnEnter事件加ActiveControl := nil,但是垂直滚动条还是不可用。
我尝试把DBGrid1.SelectedRows.Clear;还是无法去掉焦点。
有没有办法让DBGrid没有单元格获得焦点,但是垂直滚动条可以用,就像上面第二次点击添加按钮时的状态?
可以说具体点吗?我感觉不是几个DataSource的问题
dbgrid在失去焦点的时候自动执行了数据集的Cancel命令
所以你选中dbgrid后,insert,焦点再转到dbedit,即执行了cancel,你新加的行当然没有了。
你再次点添加,这时焦点不在dbgrid,所以没有执行cancel2.解决办法
dbgrid-option-dgCancelOnExit 设为falseps 有时间的话自己用button控制,DBNavigator不方便
你分析的非常对。
我的解决方法如下:
procedure TVendorInputForm.DBGrid1CellClick(Column: TColumn);
begin
edtName.SetFocus;
end;
这样每次点击单元格,焦点会跑到外面的一个控件上。同时让DBGrid的Tabstop为false,这样就避免了第一次显示的时候DBGrid获得焦点