ExpressQuantumGrid
Если бы мне пришлось придумывать название для ExpressQuantumGrid, то я бы назвал его челябинский грид, ведь он настолько крут, что зачастую руководство нужно не только разработчикам, но и конечным пользователям приложений, в которых он используется.
Сразу попытаюсь оговорить отдельные моменты. Коммерческое название продукта ExpressQuantumGrid, хотя класс в Delphi называется TcxGrid. Кроме этого грида в состав ExpressQuantumGrid Suite входят еще несколько гридов и сопутствующих им компонентов. Но пока здесь речь пойдет только о cxGrid. Я буду использовать слово “грид”, хотя его фактически не в русском языке. Но изобретать переводы как-то сетка, табличный элемент управления и т.д. я не буду. Грид, он и в Африке грид.
То, о чем я собираюсь написать в данной серии постов – очень объемный материал. То, о чем я писать не планирую – еще объемнее. Вероятно, для многих мои посты не будут откровением, но полностью пересказать 3400 страниц документации я не в состоянии. Так, что не судите меня строго, если что-то важное, на ваш взгляд “останется за кадром”. Данная серия постов всего -лишь попытка дать общее представление о продуктах Devexpress, но отнюдь не учебник. Здесь уже упоминался форум на RuBoard. Ответы на многие вопросы можно найти там. У меня собралась приличная подборка материалов из этого и других форумов. Возможно, если найду “сообщника(ов)”, я сделаю структурированный русскоязычный FAQ.
Я планирую разбить материал, посвященный ExpressQuantumGrid на несколько частей. В первой я расскажу о том, что же собою представляет этот грид, и о том, как произвести элементарные настройки, что бы “научить” TcxGrid отображать данные из DataSet. Далее – о некоторых “тонких” настройках, для решения конкретных задач, с которыми мне пришлось столкнуться.
Из того, что отличает ExpressQuantumGrid и делает его привлекательным для использования в приложениях, я бы выделил следующее:
- Возможность произвольной группировки данных пользователем;
- Возможность сортировки;
- Возможность фильтрации;
- Возможность получения статистики (например, можно вывести сумму по одной или нескольким колонкам в футере грида);
- Поддержка альтернативного оформления (скинов, правда за скины придется платить отдельно).
Есть множество других функций, зачастую уникальных, не имеющих аналогов в гридах других производителей. Но обо всех рассказать практически невозможно. В принципе, единственным гридом, которой хотя бы отдаленно приближен по функциональности к рассматриваемому, на мой взгляд, является GridEh. И хотя он не умеет делать всего того, что умеет ExpressQuantumGrid, его стоимость позволяет задуматься о нем, как о разумной альтернативе (например, на начальной стадии проекта).
Прежде всего, следует понять, что TcxGrid это не совсем аналог TDBGrid, а контейнер объектов. Далее я позволю себе процитировать официальную документацию.
При размещении TcxGrid на форму и просмотре его свойств в Object Inspector‘е, вы не найдете никаких свойств, которые позволят вам привязать грид к DataSource, настроить свойства столбцов или изменить какие-либо другие параметры привязки и представления данных. Это может показаться странным, если вы ранее использовали, скажем, стандартный TDBGrid, который имеет такие свойства, как DataSource, Columns и т. п.
Во-первых, позвольте отметить два основных преимущества TcxGrid:
- Этот элемент управления позволяет представлять данные в виде различных макетов. Этот набор макетов включает в себя стандартный макет столбцов или строк, макет карт, диаграмм, расширенный макет столбцов или строк, позволяющий группировать столбцы, создавать многострочные ячейки в строках, и т.д. И конечно, мы предоставляем возможность расширить этот набор форматов представления данных, а также развить любой из упомянутых макетов.
- Этот элемент управления позволяет отображать Master-Detail данные, а также отображать данные из нескольких независимых источников данных.
Реализация двух описанных выше преимуществ, включает в себя два ключевых понятия для ExpressQuantumGrid - grid Views и grid Levels (представления и уровни). Для реализации отображения разных форматов данных грид предоставляет набор объектов, grid Views со следующими свойствами:
- Каждый grid View может иметь собственный механизм привязки данных;
- Каждый grid View может визуально представлять данный в свойственной ему манере и использовать для этих целей свои собственные уникальные настройки;
- Все grid View имеют общий интерфейс, что позволяет гриду управлять ими единым способом.
Второе преимущество осуществляется с помощью grid levels – объектов, позволяющих организовывать grid View в иерархические и многоуровневые структуры. Грид содержит иерархию grid levels в то время, как каждый grid level имеет связанный grid View, который должен использоваться для отображения данных в каждой из точек иерархии. Так что грид это просто контейнер для grid View, которые, фактически отображают данные.
Все вышесказанное наглядно будет видно, если просто поместить грид на форму. В правом нижнем углу грида как раз и представлена его структура. Цветные прямоугольники – кликабельны. Нажав, скажем, на cxGrid1DBTableView1 вы можете в Object Inspector редактировать свойства данного Grid View.

ExpressQuantumGrid
Теперь, давайте посмотрим, что же требуется, что бы грид начал отображать данные. Создаем приложение, подключаем DataSet к любой таблице и отображаем данные в обычном TDBGrid. Теперь попытаемся вывести те же данные в TcxGrid.
Первый способ – примитивно прост. Контекстное меню cxGrid, пункт import. В появившемся диалоге выбираем, что и откуда надо импортировать.
Второй способ тоже прост. Контекстное меню, пункт Link to <название компонента TDataSource>. В данном случае эффект тот же.
Третий способ – расставить свойства вручную. Примерно так:
(cxGrid1.Views[0] as TcxGridDBTableView).DataController.DataSource:= DataSource1;
(cxGrid1.Views[0] as TcxGridDBTableView).DataController.CreateAllItems();
Настроить грид – т.е. выставить ширину столбцов, их заголовки и т.д. можно в Layout and Data редакторе (вызывается кнопкой Customize или из контекстного меню).
Таким образом, мы получили практически обычный TDBGrid, который можно использовать в приложении и в таком виде. О дальнейшей настройке грида, а соответственно и о других его возможностях в следующих постах.
Другие статьи серии:
DevExpress. Заметки на полях #0
DevExpress. Заметки на полях #1
DevExpress. Заметки на полях #2
DevExpress. Заметки на полях #3
DevExpress. Заметки на полях #3.5
DevExpress. Заметки на полях #6
DevExpress. Заметки на полях #7
DevExpress. Заметки на полях #8
DevExpress. Заметки на полях #9
DevExpress. Заметки на полях #10
DevExpress. Заметки на полях #11
DevExpress. Заметки на полях #12
DevExpress. Заметки на полях #13
Я бы не стал так говорить за пользователей.
Специально отключал у девкиного грида якобы сложные для пользователей возможности – и даже бухгалтерши просили их обратно, хотя документации не читали ни страницы.
Для разработчиков же хорошо работает презумпция “грид может все, надо только найти как”.
Ну это же шутка. Хотя в каждой шутке есть доля шутки. например, многие не могут слету понять, что столбцы можно таскать, а данные – фильтровать. Приходится объяснять…
“грид может все, надо только найти как” – это да…
А куда делась 4-ая часть статьи ?
Будем считать, что предыдущая часть и есть четвертая