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某个元素,并取得该元素值的方法?
想遍历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某个元素,并取得该元素值的方法?
我想应该可以按照我的方法吧?刚开始输入数据测试时,没有输入那么多记录,没有看出问题,问题让客户发现了,很是头疼!
我现在的解决办法,很是占用资源,效率也低。源码如下:
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;
-----------------------------------------------------------------------------
那位大虾有更好的方法吗?
就用你的方法做了,现在电脑性能也不错的,关于这个问题,也只能关注了!