QuantumGrid. Как в рантайме получить автосумму при группировке?

dmware
Дата: 22.11.2007 13:21:00
Здравствуйте!
Необходимо при выполнении группировки по какому-либо столбцу, отображать количество и сумму записей по одному из полей. Собственно задача вроде бы как несложная. В хелпе лежит пример, но там показано, как делать это в режиме дизайна. Мне это не подходит.
Все необходимо делать в рантайме, поскольку запросы разные, соответственно мы не можем знать наименование и количество столбцов. Если смотреть в хелп, можно увидеть примерно следующее:

with cxGrid1DBTableView1.DataController.Summary do begin
BeginUpdate;
try
SummaryGroups.Clear();

with SummaryGroups.Add do begin
TcxGridTableSummaryGroupItemLink(Links.Add).Column := cxGrid1DBTableView1.Columns[1];

with SummaryItems.Add as TcxGridDBTableSummaryItem do begin
Column := cxGrid1DBTableView1.Columns[4];
Kind := skSum;
Format := 'Количество: 0';
end;
with SummaryItems.Add as TcxGridDBTableSummaryItem do begin
Column := cxGrid1DBTableView1.Columns[4];
Kind := skCount;
Format := 'Количество строк: 0';
end;
end;
...
Наверное нужно еще и функцией CreateColumn() создать столбцы:
cxGrid1DBTableView1.CreateColumn(); (только где, на какое событие?)
В примере у меня столбец (Columns[1]) - тот, по которому будет осуществляться группировка, а (Columns[4]) - тот по которому нужно производить расчеты.
На какое событие следует все это повесить, я так и не понял.
У меня выполняется все на cxGrid1DBTableView1CustomDrawGroupCell и вываливается с Access Violation.
Подскажите, пожалуйста, как сделать требуемое.
RENaissance
Дата: 22.11.2007 13:31:15
dmware

У меня выполняется все на cxGrid1DBTableView1CustomDrawGroupCell и вываливается с Access Violation.

Вы бы еще на событие OnIdle или OnMessage у TApplication эту обработку повесили.

З.Ы Версия грида какая?

Posted via ActualForum NNTP Server 1.4

dmware
Дата: 22.11.2007 13:35:41
RENaissance
dmware

У меня выполняется все на cxGrid1DBTableView1CustomDrawGroupCell и вываливается с Access Violation.

Вы бы еще на событие OnIdle или OnMessage у TApplication эту обработку повесили.

З.Ы Версия грида какая?

Posted via ActualForum NNTP Server 1.4


Подскажите, как нужно.
6.30
RENaissance
Дата: 22.11.2007 15:11:41
Как пример runtime-группировки
procedure TForm1.ADODataSet1AfterOpen(DataSet: TDataSet);
var
  SummaryGroup: TcxDataSummaryGroup;
  SummaryItem: TcxGridDBTableSummaryItem;
begin
  cxGrid1DBTableView1.ClearItems();
  cxGrid1DBTableView1.DataController.Summary.SummaryGroups.Clear();
  cxGrid1DBTableView1.DataController.CreateAllItems();
  cxGrid1DBTableView1.Columns[3].GroupBy(0);
  SummaryGroup := cxGrid1DBTableView1.DataController.Summary.SummaryGroups.Add();

  SummaryItem := TcxGridDBTableSummaryItem(SummaryGroup.SummaryItems.Add());
  SummaryItem.Column := cxGrid1DBTableView1.Columns[0];
  SummaryItem.FieldName := cxGrid1DBTableView1.Columns[0].DataBinding.FieldName;
  SummaryItem.Kind := skCount;
  SummaryItem.Format := 'Количество: 0';

  SummaryItem := TcxGridDBTableSummaryItem(SummaryGroup.SummaryItems.Add());
  SummaryItem.Column := cxGrid1DBTableView1.Columns[0];
  SummaryItem.FieldName := cxGrid1DBTableView1.Columns[0].DataBinding.FieldName;
  SummaryItem.Kind := skSum;
  SummaryItem.Format := 'Сумма: 0';

  TcxGridTableSummaryGroupItemLink(SummaryGroup.Links.Add()).Column := cxGrid1DBTableView1.Columns[3];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADODataSet1.Open();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ADODataSet1.Close();
end;
Группировка создается в событии OnAfterOpen, которое вызывается после открытия набора данных. В примере группировка осуществляется
по третьему столбцу, а суммирование и подсчет количества - по первому столбцу.

Posted via ActualForum NNTP Server 1.4

dmware
Дата: 22.11.2007 15:32:56
RENaissance Вы мне очень помогли. Спасибо Вам большое!