Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Отображение данных в TcxDBGrid в динамике


Автор: zhandrew 13.6.2007, 10:48
Доброго дня!
Сделал динамическое отображение данных в компоненте TcxGrid. Динамическое, значит, на форму брошена компонента, сделана ее предварительная настройка, но не отображены поля таблицы, не подключен источник данных. Формирую запрос на лету, получаю данные, количество и тип полей, подключаю источник, отображаю - все ОК! Но, при повторном входе в процедуру не могу сбросить уже имеющиеся поля (колонки). И новые CreateColumn создает новые колонки в дополнении к имеющимся. Скажем, выполняю сформированный запрос:

Код

select account,curr,summa from mytable where curr=840


получаю столбцы: 

account  curr  summa
----------------------------
2202      840  10

затем выполняю запрос:
Код

select account,curr,summa from mytable where curr=978


получаю столбцы: 

account  curr  summa  account  curr  summa
--------------------------------------------------------
2202      978  20          2202      978  20


Вот код:

Код

procedure TfmMain.DisplayGrid;
var
  i: integer;

  // grdDataGrid это TcxGrid - объявлен в другом месте

  GridColumn   : TcxGridDBColumn;
  FieldPtr         : PFieldRecord;
  SummaryGroup : TcxDataSummaryGroup;

begin
  try
  tsDataGrid.Caption := NodeRec.NodeName;

   ...

  grdDataGrid.BeginUpdate;

  for i:=grdDataGridDBTableView.ColumnCount -1 downto 0 // попытка добиться хоть чего-нибудь...
 grdDataGridDBTableView.Columns[i].Destroy;

  grdDataGridDBTableView.ClearItems;

  grdDataGridDBTableView.DataController.Summary.SummaryGroups.Clear;

  ...

  for i:=0 to FieldsList.Count - 1 do
  begin
     FieldPtr := FieldsList[i];
     GridColumn := grdDataGridDBTableView.CreateColumn;

     with GridColumn do begin
       Visible := FieldPtr^.FieldVisible;
       Caption := FieldPtr^.FieldTitle;
       DataBinding.FieldName := FieldPtr^.FieldName;
    
        ........



Не хочеться убивать компоненту перед каждым запросом...
Спасибо.

Автор: zhandrew 14.6.2007, 10:08
Парни! Код работает! Это я из лесу вышел. Ошибка у меня в коде вне приведенного фрагмента. Просто каждый раз при вызове процедуры вызывался код добавления полей, а это надо сделать один раз. Теперь усё гуд! Кстати, и дестрой колумнс не нужен - clearitems работает корректно. Всем удачи!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)