Motto

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


пятница, 16 января 2009 г.

А стандартный DbGrid не так-то и прост

Проверял как Delphi 7 работает с одной базой данных, и обнаружил, что стандартный TDbGrid умеет рисовать многострочные заголовки с группированием. Сказать что я удивился, это то же самое, что не сказать ничего. За годы программирования в Делфи мне казалось, что про этот компонент я знаю всё, и вдруг такой сюрприз.

Мне стало интересно, знает ли кто из читателей о таких возможностях DbGrid-a, а может даже использует их?

На картинках можно увидеть как это выглядит. На первой картинке групповая колонка в развёрнутом виде. На второй тот же грид, но в свёрнутом виде.

TDbGrid c многострочным заголовком и группировкой.. Развернутый вид.

DbGrid c многострочным заголовком и группировкой.. Свернутый вид. 
Программа написана использует только стандартные компоненты входящие в состав Delphi 7(в Delphi 6 они тоже есть, но там я не проверял). Никакой отрисовки вручную. Никакого дополнительного кода(обработчиков событий).

Вопрос

Знаете ли вы о такой фиче стандартного TDbGrid?

p.s. также интересно было бы услышать догадки о том, как это сделано. ;-)

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

ViliamVolosV комментирует...

АААААаааа......
Ты взорвал мне мозг.
Я даже и не подазревал об этом и нигде де читал про это за все годы программирования
оффтоп: Что там с Лейзибилдером ?

Bose комментирует...

Я тоже на эту тему не нашёл информации, пока не столкнулся сам. =)
В исходниках VCL есть масса интересных вещей. =)
Про Лейзибилдер напишу отдельным постом чуть позже.

Валерий комментирует...

Если честно - первый раз о таком слышу - великолепное открытие! Насколько я понимаю, это сделано через свойство Expanded класса TColumn?

Последнее время вообще DBGrid не использовал - все засовывал в VirtualListView, но теперь появился повод пересмотреть некоторые свои убеждения. Спасибо!

Bose комментирует...

2 Валерий:
Это свойство - read-only, но через него легко прийти к ответу на вопрос "как?" =)))

Валерий комментирует...

Я просто не стал полностью секрет раскрывать :))

Новичек комментирует...

Может опишете поподробнее как сделать?
А то я только начал работу с БД

Bose комментирует...

Но если только начал, то лучше, на мой взгляд, использовать нестандартный DbGrid, например, Ehlib. Там многострочный заголовок реализовать намного проще. Дело в том, что в стандартном DbGrid-е эта штука сделана достаточно неудобно.

Я обязательно опишу, но скорее всего, не раньше февраля.

ViC комментирует...

Ну как? Как?! КАК?! КАК ЖЕ ЭТО ДЕЛАЕТСЯ?!

Poseidon комментирует...

Ох тыж ёпрст...

Анонимный комментирует...

это сделано средствами адо. зы он еще мастер/детейл дерево рисовать умеет безо всяких обработчиков. если поставщик данных позволяет.

Aleksey Timohin комментирует...

> это сделано средствами адо
это сделано средствами TDbGrid, и проявляется при работе с наследницами TObjectField. Подробнее, с примером - по ссылке.

Анонимный, master-detail и дерево, звучит невероятно. А можно узнать, как такое сделать?

NMorozov комментирует...

Афффигеть, даже не думал. В сове време делал общие заголовки через перехватывания OnPaint но это было намного менее красиво

Splash комментирует...

Алексей, как с вами можно лично связаться? Хотел бы пообщаться на тему DBGrid'ов и сопутствующего..

Splash комментирует...

Алексей, если не сложно, напишите на poz.nickolay(at)gmail.com

Aleksey Timohin комментирует...

Контакная ифнормация опопубликована тут.

Отправить комментарий

Читатели