如何修改并保存cxgrid单元格的值,前提是不移动记录集的行标.
我目前使用的方法是:
  cxGridDBTableView.DataController.Edit;
  cxGridDBTableView.DataController.Values[1,0]:=5;
  cxGridDBTableView.DataController.Post;
单元格的值能够修改,但是不能保存到数据库

解决方案 »

  1.   

    数据集(例ADODATASET1)的LOCKTYPE:=ltBatchOptimistic;
      

  2.   

    我是想保存到数据库中.同时希望熟悉cxgrid的朋友给予解答.
      

  3.   

    如果设置了缓冲方式,那么
    cxGridDBTableView.DataController.updateBatch(arall);
    即可保存到数据库中去了。
      

  4.   

    @tgbd:
    我的问题,应该不是你所说的方向. 请仔细看看我的问题,特定cxGrid;而且前提是不移动记录集的cursor.
    1. 无论Dataset是BatchOptimistic,还是Optimistic,都无法保存.
    2. 我的应用需求,是单条记录更新.欢迎熟悉cxgrid的朋友,给予指点.
      

  5.   

    cxGridDBTableView.DataController.DataSource.Dataset.Edit;
    cxGridDBTableView.DataController.DataSource.DataSet.RecNo:=1;
    cxGridDBTableView.Column[0].editValue:=5;
    cxGridDBTableView.DataController.DataSource.DataSet.Post;//楼主那种方法,已经与数据集分离开来了,你操作的是数组值,而不是数据集,想保存到数据库,
    必须写代码才能实现的,你的那个EDIT、POST是没有任何作用的。你可以把你的代码中的EDIT和POST注释掉,看一下效果去,表面上CXGRID中的内容改了,但光标到了那一列
    时显示的还是原来的内容,光标移开后,就又成了你写进去的内容。
      

  6.   

    首先,非常感谢您让我知道了"setvalue仅仅修改cell的数组值"!我的目的是希望: 修改cxgrid所绑定的记录集的值,并保存至db. 我之所以没有用"datacontroller.dataset.fieldbyname()....",是不想改变记录集的行标.
    您的"DataController.DataSource.DataSet.RecNo:=1;",仍然改变了行标.之所以不希望改变行标,是因为我的cxGrid及其记录集,实时显示N个后台线程的进度,一个线程对应一条记录. 而代码频繁的修改行标,就会严重影响用户对记录行的选取操作.当然,我现在有个麻烦点的办法,使用TcxTreeList. 也就是说放弃绑定. 
    但本人一向追求完美,凡有搞不定的问题放在一边,心里总不舒服. 再者,本人对代码"惜墨如金",放弃使用绑定,终觉遗憾! 故,发帖赐教. 分不够再加.
      

  7.   

    如果是这样,建议楼主放弃CXGRID,而改用StringGrid,那样更加灵活。
      

  8.   

    呵呵,StringGrid也是"放弃绑定"的方案!钻个牛角尖,继续征集原题的答案...
      

  9.   

    再试一下:
    假设第一列为表的主键,第二列为要写入的值cxGridDBTableView.DataController.Values[1,1]:=5; 
    update_db(cxGridDBTableView.DataController.Values[1,0],5);//update_db是一个过程,其中参数为表主健,5为要写入的值
    //那么楼主即可实现不移动行就可实现楼主的想法了,至于update_db过程,相信楼主可以实现的。
      

  10.   

    @tgbd(li wm):
    update_db,那和我"放弃绑定"的方案少不了多少代码,有点牵强. 总感觉cxGrid有它自己的方法.仍不死心,继续征集答案...