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. Существенно улучшенный.

13 человек заметили этот пост:

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

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

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

    TitleButtonAllowMove - я не заметил на что влияет это свойство. Исходники тоже не смотрел.
    ОтветитьУдалить
  3. Разобрался вчера что даёт TitleButtonAllowMove и обновил пост.
    ОтветитьУдалить
  4. Супер!!! Огромное спасибо за новодку. 3 дня искал, как сделать нормальный DBGrid с кастомными редакторами полей! Огромный сенькс!
    ОтветитьУдалить
  5. АнонимныйJul 13, 2009 05:02 AM
    Хороший обзор! За наводку спасибо, вот только с TJvgVertDBSGrid облом вышел, не нашёл его на палитре компонентов, полез в исходники, а там он за директивой {$IFNDEF DelpiPersonalEdition} прячется, с моим D6 Enterprise облом получается :( Может, кто знает ещё бесплатные аналоги вертикальных гридов?
    ОтветитьУдалить
  6. Анонимный по идее {$IFNDEF DelpiPersonalEdition} не должно срабатывать для D6 Enterprise.
    К слову, TJvgVertDBSGrid следует искать на одной из закладок Globus. Кстати, если я верно помню, то TJvgVertDBSGrid построен на базе обычного StringGrid-a и из-за этого работает не совсем так как должен работать дб-грид, ну и пользоваться им не очень удобно.
    ОтветитьУдалить
  7. АнонимныйJul 14, 2009 01:07 AM
    Йех, вот ни на одной из этих вкладок его и нет, и Enetrprise вроде ни при чём, а наоборот, прочитал readme.htm, там этот компонент помечен как "Not available in Standard and Personal versions." Переустановка не помогает, фигня какая-то. Хотел его использовать для отображения данных из таблицы с большим количеством полей, уж очень хорошо бы вписался. Да вот такая напасть(
    ОтветитьУдалить
  8. Хммм. Я у себя тоже не смог найти. Причина, видимо в том, что команда JVCL подчистила список Globus-компонент в 12128 ревизии , убрав срежи прочих и TJvgVertDBSGrid.
    ОтветитьУдалить
  9. АнонимныйFeb 6, 2010 02:37 AM
    Подскажите, пожалуйста! При установке JVCL пакеты JvBDE и JvDB на Delphi 2009 не устанавливаются. Причем уже в Install-ляторе, поставляемом с пакетом JVCL они выделяются желтым цветом в отличие от других. Библиотека JCL ставится без капризов. В чем может быть дело?
    ОтветитьУдалить
  10. АнонимныйMar 17, 2011 07:05 AM
    Не могу понять как работает WordWrap. Подскажите плз, что нужно сделать чтобы текст в заголовке стал отображаться в две строки.
    Спасибо.
    ОтветитьУдалить
  11. АнонимныйMar 20, 2011 11:13 PM
    Забыл сразу отписать. Разобрался с wordwrap: надо свойство TitleRowHeight задать в соответствии с предполагаемым количеством строк в заголовке.
    ОтветитьУдалить

Читатели