当前位置: 代码迷 >> Delphi >> 批改cxgird某列的值报错
  详细解决方案

批改cxgird某列的值报错

热度:9985   发布时间:2013-02-26 00:00:00.0
修改cxgird某列的值报错
大家好,我遇到这样一个问题,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
  相关解决方案