Witam,
Wiem, że wielopoziomowy nagłówek (Expanded) w TDBGrid jest możliwy do zrobienia tylko na kolumnach, które zawierają dane typu ftADT lub ftArray. Typy te są obsługiwane przez tylko niektóre bazy danych (np.: Oracle).
W jaki sposób można napisać własny komponent oparty na TDBGrid, który umożliwiałby tworzenie wielopoziomowego nagłówka dla bazy MS SQL?
Próbowałem zrobić to przez małą sztuczkę:
- Tworzę 3 kolumny w TDBGrid
a. Kolumna 1 – zawiera dane po zwinięciu nagłówka,
b. Kolumna 2 i 3 – zawierają dane szczegółowe (po rozwinięciu nagłówka), - Przy uruchomieniu aplikacji ukrywam kolumnę 2 i 3,
- Przy kliknięciu kolumny 1 ukrywam kolumnę 1 i pokazuję kolumnę 2 i 3
- Przy kliknięciu kolumny 2 lub 3 ukrywam kolumny 2 i 3 a pokazuję kolumnę 1
To rozwiązanie ma jednak kilka wad:
- Nie posiada „ładnego” przycisku w nagłówku informującego użytkownika o akcji, która zostanie wykonana,
- Uniemożliwia wybór kolumny, po której mają być sortowane dane,
- [Chyba najważniejsze], nagłówek jest jedno wierszowy, co powoduje, iż użytkownik nie wie czego dotyczą dane po rozwinięciu nagłówka.
np.:
Zdefiniowane kolumny w TDBGrid (struktura płaska):
Kolumna 1 – Kupujący
Kolumna 2 – Imię
Kolumna 3 – Nazwisko
Kolumna 4 – Sprzedający
Kolumna 5 – Imię
Kolumna 6 - Nazwisko
Nagłówek po zwinięciu:
|Kujący|Sprzedający|
Nagłówek po rozwinięciu:
|Imię|Nazwisko|Imię|Nazwisko|
Idealne rozwiązanie to:
Nagłówek po zwinięciu:
[Kupujący |/][Sprzedający |/]
Nagłówek po rozwinięciu:
[Kupujący |/][Sprzedający |/]
[Imię|Nazwisko| ][Imię|Nazwisko| ]
Wiem, że są napisane do tego gotowe komponenty (również polskie), ale niestety wszystkie, na które natrafiłem przeszukując google, są płatne. Jeśli ktoś zna jakiś darmowy komponent to byłbym wdzięczny za linka do niego.
Dlatego też zdecydowałem się na napisanie własnego komponentu, niestety (jak widać) nie bardzo wiem jak tego dokonać. Jedynie się domyślam, iż trzeba będzie napisać własną klasę TColumn i TDBGridColumn z dodatkowymi własnościami oraz zmieć sposób malowania TDBGrid.
Byłbym bardzo wdzięczny za wszelkie wskazówki.