dxDBGrid数据源ADODataSet的CursorType为ctStatic,LockType为ltBatchOptimistic。
想遍历dxDBGrid的某列,并算出该列的合计。以下为源代码:
lCol := dxDBGrid.ColumnByFieldName(sFiled).ColIndex;
totalnum:=0;
For i := 0 To dxDBGrid.Count-1 Do   //dxDBGrid.Count只是屏幕能够显示的记录的多少,
begin                              //并不是实际记录的多少
    totalnum=totalnum+strtoint(dxGrid.Items[i].Strings[lCol]);   
end
其中:dxDBGrid.Count为屏幕能够容纳下的记录数量,如果超出屏幕显示的就不对了,而dxDBGrid.DataSource.DataSet.RecordCount就能得出全部记录数。
而dxGrid.Items[i].Strings[lCol]中的i、lCol也是相对于屏幕显示的相对位置。
请问:有什么可以绝对定位dxGrid某个元素,并取得该元素值的方法?

解决方案 »

  1.   

    这个问题提得好,这样就能完全控制dxDBGrid的数据,而不需要繁琐的从dataSource取了
      

  2.   

    to LZGUI(威靈) :这样不行的。因为是同时多个记录的更新,所以采用ltBatchOptimistic。
    我想应该可以按照我的方法吧?刚开始输入数据测试时,没有输入那么多记录,没有看出问题,问题让客户发现了,很是头疼!
    我现在的解决办法,很是占用资源,效率也低。源码如下:
      AdoTemp := TADODataSet.Create(Nil);
      AdoTemp.Recordset := TADODataSet(dxDBGrid.DataSource.DataSet).Recordset;
      totalsum:=0;
      AdoTemp.Recordset.MoveFirst;
      While Not AdoTemp.Recordset.Eof Do
      Begin
        totalsum:=totalsum+ AdoTemp.Recordset.Fields['Price'].Value;    AdoTemp.Recordset.movenext;
      End;  AdoTemp.close;
      AdoTemp.Free;
    -----------------------------------------------------------------------------
    那位大虾有更好的方法吗?
      

  3.   

    TO fghfgh()
    就用你的方法做了,现在电脑性能也不错的,关于这个问题,也只能关注了!
      

  4.   

    PB的DataWindow可以这么做,但看来Delphi不推荐这种方式