怎么为DBGrid的一个单元格付值又不让这个值提交到数据库呢?

解决方案 »

  1.   

    填写完以后不要运行dataset.post
      

  2.   

    我是从另一个窗口的Edit中取值来填入DBGrid的。
      

  3.   

    编辑dataset后填入,保存给予前提示!
      

  4.   

    我的意思是DBGrid有没有像StringGrid那样的
    property cell[ACol,ARow:Integer]:string;
    的属性?
      

  5.   

    没有的,它是和数据集关联的,与StringGrid不同
      

  6.   

    楼主是思维怪异得很,不得不佩服……不过还是提供你一个解决的思路:其实 DBGrid 和 StringGrid 都继承于 TCustomGrid,所以如果你要处理上面的东西,可以来点“硬”功夫,就是强制类型转换!举个例子,DBGrid 里面并没有 FixedCols 和 FixedRows 的参数,但是请试一下在你的程序中加入下面的语句:TStringGrid(DbGrid1).FixedCols := 2;你会发现奇迹:你的 DBGrid 竟然有一行固定列的!!!(注意,第一个固定列是 DBGrid 的 Indicator)同理,如果你需要改动里面的东西,转换后就能得到 Cells 的属性了。不过楼主还是不要乱来,如果 DBGrid 的内容与数据库不一致,那么 DBGrid 再没有意义了……
      

  7.   

    补充:
        我上面选用 FixCols 的原因,是因为看起来比较明显,而且要修改 DBGrid 的,也多数是因为要修改固定列的内容。
      

  8.   

    to  deavilness(夜魔) 我用TStringGrid(DbGrid1).Cells[0,0]=‘100’进行修改的时候会出现地址错误,怎么办??
      

  9.   

    如果你是不是想用DBGRID来做数据提交,可以在dbgrid的datasource.dataset的active=true之前设置dbgrid.datasource.dataset.locktype 改为:ltbatchoptimistic
    之后所有的修改post后只要不updatebatch()则不会提交数据库
    在dbgrid的datasource.dataset的 active=false 之后
    将dbgrid.datasource.dataset.locktype还原
      

  10.   

    真对不起,CustomGrid 并没有 Cells 属性,那么就用 TCustomGrid 的属性:var
      rect: TRect ;
      ...
    begin
      rect := DBGrid1.CellRect(0, 0) ;
      DBGrid1.Canvas.FillRect(rect); { 清除空格,这里我没有处理颜色 }
      DBGrid1.Canvas.TextOut(rect.Left, rect.Top, '这家伙总有奇怪的想法');文字的位置你自己调整,这里就不多说了。
      

  11.   

    谢谢deavilness(夜魔) ,你的qq是多少,等一下我把分汇到你的帐上。
      

  12.   

    填写后暂时不提交:参考cg1120(代码最优化-§新年祝福你,好运伴着你§)
    对某一单元格赋值可以这样:
      TdrawGrid(Dbgrid1).Row:=1;
      TDrawGrid(Dbgrid1).col := 2;
      Dbgrid1.setfocus;
      Adoquery1.Edit;
      Dbgrid1.SelectedField.Value:='good';