У меня есть мастер/подробно ClientDataSet следующим образом (они создаются/заселена во время выполнения и заполняется данными возвращается из API вызова, нет подключения к базе данных):DELPHI: Master-Detail с использованием ClientDataSet и CalcFields
Services:
ID
Name
BasePrice
etc.
AddOns:
Selected
ID
ServiceID
Name
Quantity
UnitCost
TotalCost
etc.
Я показываю Службы как выпадающее поле, которое затем заполняет сетку доступными надстройками для этой службы. Поле «TotalCost» представляет собой вычисленное поле, отображаемое в сетке в своем столбце. Поле «Выбранные» используется для отслеживания флажка, отображаемого в сетке, чтобы указать, что клиент хочет это конкретное дополнение.
Это все работает так, как ожидалось. Теперь мне нужно рассчитать общую стоимость услуги плюс любые дополнения. Стоимость услуги я могу получить с помощью:
ClientDataSetServices.FieldByName('BasePrice').Value
Однако я не смог получить TotalCost от каждого выбранного дополнения. Я думал, что могу использовать поле «Агрегат», но в своих поисках я обнаружил, что это невозможно выполнить с помощью настройки мастера/детали. Я также попытался просто перебирать детали ClientsDataSet следующим образом:
(within the CalcFields method of the details ClientDataSet)
// Add parts to parts cost
grdMain.DataSource.DataSet.First;
while not grdMain.DataSource.DataSet.Eof do begin
if (grdMain.DataSource.DataSet.FieldByName('Selected').Value) then begin
FPartsCost := FPartsCost +
grdMain.DataSource.DataSet.FieldByName('TotalPrice').Value;
end;
grdMain.DataSource.DataSet.Next;
end;
Но это вызывает бесконечный цикл. Когда я отлаживаю эту часть кода, я обнаружил, что ... DataSet.First вызывает CalcFields (или что-то еще, что в свою очередь вызывает CalcFields).
Как я могу перебирать DataSet выбранных надстроек для динамического расчета общих затрат (при каждом изменении выбора или количества)?
--EDIT--
Я пытался настроить агрегатной на столе детали следующим образом:
- Добавлена TAggregate 'AggregatePrice'
- Установите поля следующим образом: Активный - True Наименование - AggregatePrice ' Выражение - SUM (TotalPrice) GroupingLevel - 1 IndexName - ServiceId Visible - Правда
Когда я запускаю это я получаю сообщение об ошибке «„TotalPrice“поле не правильный тип calcualted поля для использования в качестве заполнителя, используйте internalcalc»
> * «это не выполнимо с использованием настройки мастера/детали» * - Это неверно, вы еще читали о «TAggregateField» или «TAggregate» в документах? –
Посмотрите мой EDIT в исходном вопросе. – BrianKE
Я не вижу EDIT ... –