Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Как я уже говорил в предыдущем посте, бывает несколько видов Grid View. В частности –  Card View, Table View, Banded Table View (расширение Table View) и Chart View. На рисунке приведена схема наследования для соответствующих классов.

ierarhy

Из рисунка видно, что для каждого вида View существуют реализации с привязкой к источнику данных и без нее. В официальной документации содержаться пошаговые руководства по использованию каждого из трех видов View (Table View, Card View и Chart View) с привязкой к источнику данных. Если вы четко представляете себе структуру грида (то, как связаны между собой грид, level и view), то, действительно все выглядит очень просто.
В предыдущей части данного повествования мы использовали Table View. Прежде чем перейти к рассмотрению остальных видов Grid View, предлагаю сначала несколько подробней разобраться с настройками данного отображения.
Все свойства TcxDBGridDBTableView сгруппированы в классы. Общее количество свойств  довольно велико, и описывать в рамках данного обзора не имеет смысла. Вместо этого я попробую описать как настроить TcxDBGridDBTableView, что бы добиться от него определенного поведения.

Группировка данных.

По умолчанию для нового объекта TcxDBGridDBTableView группировка данных включена. Если вы заметили, в верхней части грида находится область с надписью “Drag a column header here to group by that column” (перетащите заголовок столбца сюда, для того, что бы сгруппировать по данному столбцу). Действительно, если вы запустите приложение и попытаетесь перетащить заголовок столбца на область с данной надписью, то увидите, что данные будут сгруппированы. Группировка может быть многоуровневой.

drag

За саму возможность группировки отвечает свойство OptionsCustomize.ColumnGrouping. Если мы выполним следующий код, то возможность группировки не будет поддерживаться, а область для перетаскивания исчезнет. Хотя, если на данный момент ваши данные были сгруппированы по каким-либо колонкам, то эта группировка сохранится.

cxGrid1DBTableView1.OptionsCustomize.ColumnGrouping:=False;
cxGrid1DBTableView1.OptionsView.GroupByBox:= False;

Управлять группировкой полей можно и программно.

Допустим, у нас есть колонки грида, которые называются (свойство Name) cxGrid1DBTableView1langId и cxGrid1DBTableView1pr. Для того, что сгруппировать данные по этим колонкам нужно выполнить следующий код:

cxGrid1DBTableView1langId.GroupIndex:=0;
cxGrid1DBTableView1pr.GroupIndex:=1;

Свойство Options.Grouping отвечает за возможность группировки по данному столбцу.

Для того, что бы сделать значения колонок, по которым сгруппированы данные видимыми в самом гриде, а не только в области группировки, необходимо присвоить свойству OptionsCustomize.ColumnHidingOnGrouping значение false.

cxGrid1DBTableView1.OptionsCustomize.ColumnHidingOnGrouping:=False;

Все довольно просто. Тем не менее, нужно быть аккуратным с группировкой, особенно по столбцам, соответствующим ключевым полям. Допустим, вы сгруппировали данные по столбцу cxGrid1DBTableView1id, поле ID является ключевым автоинкрементным. После этого вы  пытаетесь  добавить запись. В результате вы получите сообщение “Field ‘Id’ cannot be modified”.

Что бы избежать подобной ситуации я использую примерно следующий код перед добавлением записи:

for i:=0 to cxGrid1DBTableView1.ColumnCount-1 do
begin
cxGrid1DBTableView1.Columns[i].GroupIndex:=-1;
end;
if DataSet.State in [dsInsert, dsEdit] then
try
DataSet.Post;
finally

end;

Соответственно, потом порядок группировки можно возвращать в исходное состояние. Я не ручаюсь за то, что такое решение – оптимальное. Но я нашел его самостоятельно быстрее, чем в документации (все же, 3 400 страниц англоязычного текста не шутка, даже если текст неплохо структурирован) и оно работает. Если Вы знаете более простой и действенный способ – поделитесь.

Сортировка

Если вы нажмете на заголовке столбца мышкой, то данные будут отсортированы по данному столбцу. Повторное нажатие приведет к изменению порядка сортировки. Такое поведение TcxDBGridDBTableView установлено по умолчанию. Также поддерживается сортировка по нескольким полям. Для этого нужно на втором поле нажать мышкой, придерживая клавишу Ctrl (Ctrl+Mouse Left). Снять с поля сортировку так же можно с помощью этой комбинации. Порядок сортировки и сам факт ее наличия показывается с помощью специальной пиктограммы в виде треугольника на заголовке поля.

Свойство OptionsCustomize.ColumnSorting отвечает за возможность сортировки колонок.

cxGrid1DBTableView1.OptionsCustomize.ColumnSorting:= False;

С помощью свойства Options.Sorting можно отключить сортировку отдельного столбца.

Как и в случае с группировкой порядком сортировки можно управлять программно:

cxGrid1DBTableView1id.SortOrder:= soAscending;
cxGrid1DBTableView1id.SortIndex:=0;

О фильтрации данных и других функциональных возможностях TcxDBGridDBTableView речь пойдет в следующей части…

Другие статьи серии:

DevExpress. Заметки на полях #0
DevExpress. Заметки на полях #1
DevExpress. Заметки на полях #2
DevExpress. Заметки на полях #3
DevExpress. Заметки на полях #3.5
DevExpress. Заметки на полях #5
DevExpress. Заметки на полях #7
DevExpress. Заметки на полях #8
DevExpress. Заметки на полях #9
DevExpress. Заметки на полях #10
DevExpress. Заметки на полях #11
DevExpress. Заметки на полях #12
DevExpress. Заметки на полях #13


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

2 комментария: DevExpress. Заметки на полях #6

  • DataModule2.Table1.Edit;
    DataModule2.Table1.Fields[7].AsString := IntToStr(StrToInt(DataModule2.Table1.Fields[7].AsString) – 1);
    DataModule2.Table1.Post;

    field ‘HT’ cannot be modified
    что это значит!

    • Вообще, правило хорошего тона – вызывать поле по имени.
      DataModule2.Table1.FieldByName(‘HT’).AsString:=’Чего-то там';

      А во вторых оно, возможно действительно не может быть модифицировано. Например, если оно вычисляемое…

Ответить на Артём Отмена ответа

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика