我在编程序的时候碰到这么一个问题,我用dbgrid来显示一个数据库,其中数据库有一个合计项,要求用户在改变某一列数值的时候,这列数值自动累加到合计项中去。我从数据库中提取数据来进行加法运算,但是随着我改变数据库的当前记录位置,dbgrid也跟着改变当前位置。这样等到我算完合计项后,dbgrid本来聚焦的那个网格的位置就改变了。我想计算合计项,而dbgrid的聚焦的那个网格位置不作改变,不知应该怎么办。我想着直接从dbgrid中提取数据(提取一个小格中的数据),不知怎么实现?dbgrid中没有对应每个网格的属性和方法,我用TCustomGrid中的属性和方法,但是老提示没定义。dbgrid不就是从TCustomGrid继承过来的吗?怎么没法用。望各位高手指点一二,不胜感激。急用。

解决方案 »

  1.   

    你是要对列合计还是对行合计?
    对行合计用计算字段,
    对列合计找个第三方控件如ehlib
      

  2.   

    ehlib到哪里找?我是对列合计
      

  3.   

    我想,你是要实现这样的功能:当用户改变某一值后,计算合计,但在DBGRid中的指向仍为计算合计前的值。
      你可以这样做。
    一:
      var CurrID:integer;
     
      CurrID:=qrQuery.RecNo;//记下计算前的记录号
      //统计列
      //打开表
      qrQuery.RecNo:=CurrID;
      
    另一种方法:
      假设表中有一字段为"name"
      var  name:string;
      name:=qrQuery.FieldByName('name').asstring;
      //统计列
      //打开表
      qrQuery.Locate('name',name,[]); 
      

  4.   

    这样做虽然可以回到那条记录的位置,但是在dbgrid中只是回到那一行,并没有指向相应的单元格,也就是没有选定那个单元格。
      

  5.   

    ehlib:http://mydelphi.8u8.com/index0.htm
      

  6.   

    用dbgrideh控件,在www.51delphi.com有的下载