Я предполагаю, что вы назначили столбцу какой-то редактор свойств (возможно, DateEdit).
Учитывая это, вы можете попробовать использовать следующий код в событии OnValidate редактора свойств:
var
ValueThirdCol : variant;
RecordIndex : integer;
begin
RecordIndex := myView.DataController.FocusedRecordIndex;
ValueThirdCol := myView.DataController.GetValue(RecordIndex, MyEndDateCol.Index) - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
myView.DataController.SetValue(RecordIndex, myDifCol.Index, ValueThirdCol);
end;
Обратите внимание, что вам, возможно, придется немного изменить этот код в зависимости от того, установили ли вы для GridMode или DataModeController.SyncMode значение true или нет, и использовать DisplayValue там, где это необходимо, но основная идея должна работать.
EDIT: событие OnValidate редактора свойств возникает перед преобразованием отображаемого значения в значение редактирования. Вот почему этот код, который я предоставил, должен был быть изменен.
Чтобы код работал, вам нужно использовать (для изменяемого столбца) аргумент DisplayValue, предоставленный событием, вместо значения, возвращаемого GetValue.
Например, если EndDateCol будет столбцом, который инициирует OnValidate, тогда код должен быть
ValueThirdCol := DisplayValue - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
ХТН
person
Guillem Vicens
schedule
02.07.2012