Motto

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


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


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

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

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

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

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

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

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

Вопрос

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  5. Я просто не стал полностью секрет раскрывать :))

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

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

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

    ОтветитьУдалить
  8. Ну как? Как?! КАК?! КАК ЖЕ ЭТО ДЕЛАЕТСЯ?!

    ОтветитьУдалить
  9. Ох тыж ёпрст...

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

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

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

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

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

    ОтветитьУдалить
  14. Алексей, если не сложно, напишите на poz.nickolay(at)gmail.com

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

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