大家好,我遇到这样一个问题,cxgrid连接数据库显示数据后,我想用cxgrid的gridview单击事件来修改cxgrid选中行特定列的数据:
代码是这样的:
procedure TFESchedule.DataGrid_ViewCellClick(
Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
begin
with query1 do
begin
edit;
fieldbyname('Data_Value').value:=1;
post;
end;
end
上面如果不用post的话,就不会提示:access violation at address 0062a428这个错,但是需要用鼠标移开当前行的焦点才会提交成功修改的数据。
再或者,我先选中要修改的数据,然后在用button单击事件中写上面的修改代码也是没有问题;
请教各位是什么原因啊???多谢了!
------解决方案--------------------------------------------------------
你修改数据感知控件的数据时,如果没有移动焦点,或没有执行保存操作,
这个数据还是原来的,也就是内存预存(缓存)的数据,而你修改的数据,还在数据感知控件上,
并没有覆盖内存预存(缓存)的数据,这个是便于操作人员对你当前修改的数据进行确认,
确认的判断就是:焦点移开,或执行保存操作,或其它赋值操作。
一旦确认,就会覆盖掉缓存的数据。
------解决方案--------------------------------------------------------
cxgrid应该有afterscroll属性的。在修改处理的时候应该把该指针置nil