iMa*_*ari 10 delphi tclientdataset delphi-xe2
我有ClientDatSet一些fkInternalCalc领域.CDS与任何提供商均无关联; 而是它在飞行中填充.如何强制CDS重新计算所有"可计算"字段?我无法打电话,Refresh()因为没有提供商来刷新数据.我到目前为止唯一的方法是浏览所有记录,这不是最好的方法.
我用一个帮助器(在这里剥离到必要的)来实现这一点,它允许在没有任何黑客的情况下调用受保护的方法.确保DataSet.State = dsInternalCalc在onCalcFields内部检查fkInternalCalc字段.
type
TClientDataSetHelper = class helper for TClientDataSet
public
function AssureEditing: Boolean;
procedure InternalCalc;
end;
function TClientDataSetHelper.AssureEditing: Boolean;
begin
result := not (State in [dsEdit, dsInsert]);
if result then
Edit;
end;
procedure TClientDataSetHelper.InternalCalc;
var
needsPost: Boolean;
saveState: TDataSetState;
begin
needsPost := AssureEditing;
saveState := setTempState(dsInternalCalc);
try
RefreshInternalCalcFields(ActiveBuffer);
finally
RestoreState(saveState);
end;
if needsPost then
Post;
end;
Run Code Online (Sandbox Code Playgroud)
使用可以很容易地扩展到正常的计算字段CalculateFields.虽然这不是必需的,因为只要任何其他数据字段发生变化,就会重新计算计算字段.
| 归档时间: |
|
| 查看次数: |
3311 次 |
| 最近记录: |