需要对数据集中的所有行激发OnCalFields,而不仅仅是DBGrid delphi中可见的行

需要对数据集中的所有行激发OnCalFields,而不仅仅是DBGrid delphi中可见的行,delphi,aggregate,dbgrid,Delphi,Aggregate,Dbgrid,我正在使用DelphiXe5和FireDAC 我在数据集中有一个计算出的字段价格和一个合计字段总价。聚合字段将计算出的字段价格_的值相加 数据集显示在Dbgrid中,由于有许多行,数据集的一些行在Grid view窗口之外,需要滚动到视图中 我遇到的问题是,我得到的总金额仅针对在DBgrid中显示的行中显示的每个价格的值。所以这个总数是不正确的。当我滚动DBGrid以将其他行带入视图时,总和将更新,然后更正 我希望计算数据集中所有行的总和,而不仅仅是DGrid中可见的行 我之所以使用计算字段,是

我正在使用DelphiXe5和FireDAC

我在数据集中有一个计算出的字段价格和一个合计字段总价。聚合字段将计算出的字段价格_的值相加

数据集显示在Dbgrid中,由于有许多行,数据集的一些行在Grid view窗口之外,需要滚动到视图中

我遇到的问题是,我得到的总金额仅针对在DBgrid中显示的行中显示的每个价格的值。所以这个总数是不正确的。当我滚动DBGrid以将其他行带入视图时,总和将更新,然后更正

我希望计算数据集中所有行的总和,而不仅仅是DGrid中可见的行

我之所以使用计算字段,是因为我使用了一些进一步的逻辑来计算价格,而在获取数据的SQL语句中,我无法做到这一点

我知道有什么办法吗


注意:我已经尝试将FetchOptions设置为fmAll,但没有成功。还是要滚动网格?

默认的抓取模式是fmOnDemand,只有在向下滚动网格时才会抓取行。将FetchOptions.Mode属性设置为fmAll应该可以解决您的问题,因为它在打开数据集时会获取所有行。请注意,更改FetchOptions.Mode可以解决您的问题,但是如果您的数据集太大,仅仅因为它获取了所有行,您就会讨厌网格的性能。这也意味着更多的数据通过网络连接从服务器传输到客户端。@Ken,没错,但是没有太多可供选择的。如果你想在客户端计算所有元组的数据,你只需要把它们全部取出来。@TLama:是的。只是想注意性能问题。我几乎总是在服务器端找到一种方法来做这类事情,这样即使涉及到包含非常大数据集的临时表,也可以在SQL中完成。@KenWhite我也会使用关系数据库来解决这个问题。我将创建一个单独的关系表,每个表只存储两个字段master key和Price_。这将允许真正简单的方法将数据检索到客户端,而无需消耗太多的网络错误。最好的是,这可以独立于DBGrid完成,所以不会影响它的性能。