Страницы

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

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

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

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

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

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