Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


пятница, 19 декабря 2008 г.

Описание DB Grid-ов в JVCL или чем JvUltimateDbGrid лучше стандартного DbGrid.

В бесплатной библиотеке компонентов JVCL присутствуют 4 DbGrida. TJvgDbGrid, TJvDbGrid, TJvDBUltimGrid и TJvgVertDbSGrid. Я сравнил доступные гриды. Самым лучшим оказался TJvDBUltimGrid(хотя Ehlib даже версии 3.6 ему не переплюнуть).

TJvgDbGrid – DbGrid из библиотеки Globus. TJvgVertDBSGrid – грид отображающий список полей вертикально, отображает только одну запись.

Также в JVCL присутствует несколько компонентов, облегчающих работу с гридом.

  • Компоненты для экспорта содержимого DBGrid в файл, вместе с форматированием:
    • TJvDbGridCSVExport, TJvDbGridXMLExport, TJvDbGridHTMLExport – экспорт в CSV, XML и HTML(посмотрел только экспорт в HTML)
    • TJvDBGridExcelExport, TJvDbGridWordExport – требуют установленных Excel, Word.
  • TJvDbGridFooter – дополнительный Footer для DbGrid.
  • TJvgGridHeaderControl – дополнительный header для грида.(не смотрел)

Я опишу в этом посте большинство свойств TJvDBUltimGrid, отсутствующих в стандартном TDbGrid-e. Кстати, большая их часть присутствует и в TJvDbGrid.

Список вкусностей под катом..

AutosizeColumns – автоматически подстраивать ширину колонок.
AutoSizeRows – автоматически подстраивать высоту строк.
AlternateRowColor и AlternateRowFontColor – позволяет использовать другие цвета для чётных рядов
BooleanEditor – показывать CheckBox для Boolean-полей
DotNetHighlightning – рисовать рамочку вокруг контрола имеющего фокус(стандартное свойство для всех JVCL контролов)
FixedCols – аналогично свойству StringGrid-a
IniStorage – позволяет подключать TJvFormStorage[*], который будет использоваться для сохранения настроек grid-a(я не использовал, но полагаю, что это видимые столбцов, их ширина e.t.c.)
MaxColumnWIdth и MinColumnWidth – ограничения по ширине столбцов
MultiColorSort – позволяет проводить сортировку по нескольким колонкам(с зажатым Ctrl)
PostOnEnterKey – Post по нажатию Enter(?)
ReadOnlyCellColor – выделять другим цветом, ячейки только для чтения

RowResize – разрешается изменять высоту строк(если отключено свойство AutoSizeRows)
TitleArrow - показывает стрелочку в верхнем левом углу, вызывающую диалог, позволяющий скрывать/показывать колонки
TitleButton
- заголовки колонок начинают работать как кнопки(нажимаются). При включении этого свойства, колонки можimageно перетаскивать правой кнопкой мышки(а обычно - левой).
TitleButtonAllowMove
- разрешает перетаскивать колонки при включенном режиме TitleButton левой кнопкой мышки
SelectColumn и SelectColumnDialog – позволяет настроить параметры этого диалога
ShowMemos – отображать текстовые блобы в grid-e.
ShowCellHint, ShowTitleHint – не смотрел
SortWith – теоретически это свойство управляет автосортировкой записей в гриде. Но мне не удалось подружить его с ClientDataset-ом.
UseXPThemes – отрисовывать grid с использованием тем Windows.
WordWrap – включает многострочное отображение для заголовков, строковых полей и полей типа memo. 

А теперь десерт. EditControls – это, наверное, самое вкусное свойство, позволяющее назначить для каждого поля свой тип редактора. Редактором может быть любой DB Editor. Вот как выглядит присвоение редактора в design-time:

image

В коде, редактор можно установить следующим образом:

edtText1.DataSource:=JvDbGrid1.DataSource;
edtText1.DataField := ‘RES_NAME’;
with JvDbGrid1.EditControls.Add do
begin 
  FieldName:=’RES_NAME’; 
  ControlName:=’edtText1’; 
end;

Помимо этого, при включенном режиме Multiselect, JvDbGrid позволяет выделять записи мышкой(с зажатым Shift-ом).

p.s. при написании этого поста, нехороший Windows принудительно перезапустил компьютер, но пост спасся, благодаря автосохранению в Windows Live Writer.

* TJvIniFormStorage – это бывший TrxFormStorage из RxLib. Существенно улучшенный.

14 комментариев:

  1. Да, EditControls - это классно! Удобная штука.

    Там вроде ещё есть свойство для того, чтобы можно было делать многострочные заголовки.

    TitleButtonAllowMove - при включении ничего не поменялось?

    ОтветитьУдалить
  2. ksili, многострочные заголовки? Это теоретически было бы здорово. С другой стороны там есть TJvgGridHeaderControl - вероятно, с его помощью можно реализовать заголовки на сколько-хочешь-строк =)

    TitleButtonAllowMove - я не заметил на что влияет это свойство. Исходники тоже не смотрел.

    ОтветитьУдалить
  3. Разобрался вчера что даёт TitleButtonAllowMove и обновил пост.

    ОтветитьУдалить
  4. Супер!!! Огромное спасибо за новодку. 3 дня искал, как сделать нормальный DBGrid с кастомными редакторами полей! Огромный сенькс!

    ОтветитьУдалить
  5. Анонимный13 июля 2009 г., 15:02

    Хороший обзор! За наводку спасибо, вот только с TJvgVertDBSGrid облом вышел, не нашёл его на палитре компонентов, полез в исходники, а там он за директивой {$IFNDEF DelpiPersonalEdition} прячется, с моим D6 Enterprise облом получается :( Может, кто знает ещё бесплатные аналоги вертикальных гридов?

    ОтветитьУдалить
  6. Анонимный по идее {$IFNDEF DelpiPersonalEdition} не должно срабатывать для D6 Enterprise.
    К слову, TJvgVertDBSGrid следует искать на одной из закладок Globus. Кстати, если я верно помню, то TJvgVertDBSGrid построен на базе обычного StringGrid-a и из-за этого работает не совсем так как должен работать дб-грид, ну и пользоваться им не очень удобно.

    ОтветитьУдалить
  7. Анонимный14 июля 2009 г., 11:07

    Йех, вот ни на одной из этих вкладок его и нет, и Enetrprise вроде ни при чём, а наоборот, прочитал readme.htm, там этот компонент помечен как "Not available in Standard and Personal versions." Переустановка не помогает, фигня какая-то. Хотел его использовать для отображения данных из таблицы с большим количеством полей, уж очень хорошо бы вписался. Да вот такая напасть(

    ОтветитьУдалить
  8. Хммм. Я у себя тоже не смог найти. Причина, видимо в том, что команда JVCL подчистила список Globus-компонент в 12128 ревизии , убрав срежи прочих и TJvgVertDBSGrid.

    ОтветитьУдалить
  9. Подскажите, пожалуйста! При установке JVCL пакеты JvBDE и JvDB на Delphi 2009 не устанавливаются. Причем уже в Install-ляторе, поставляемом с пакетом JVCL они выделяются желтым цветом в отличие от других. Библиотека JCL ставится без капризов. В чем может быть дело?

    ОтветитьУдалить
    Ответы
    1. При танцах с бубном я выяснил, что JVCL любит короткий путь. У меня стало так: на диске С сделал папку JVCL, в ней папки jcl и jvcl соотвоетственно. Сначала ставлю jcl (тк в будущем jvcl без нее не станет), запуск��я install.bat. Потом ставлю jvcl, запуская instsll.bat из ее папки. ПРИ ЭТОМ ВАЖНО, ЧТОБЫ jvcl увидел установленную jcl (это первое или второе окно установки, слева внизу окна). Если все правильно, то ставится на 100%, а чтобы к этому прийти я мучался неделю! )
      Успехов!

      Удалить
  10. Не могу понять как работает WordWrap. Подскажите плз, что нужно сделать чтобы текст в заголовке стал отображаться в две строки.
    Спасибо.

    ОтветитьУдалить
  11. Забыл сразу отписать. Разобрался с wordwrap: надо свойство TitleRowHeight задать в соответствии с предполагаемым количеством строк в заголовке.

    ОтветитьУдалить

Постоянные читатели