Sortarea dbgrid făcând clic pe o coloană, delphisite

InsertOrderBy # 40; Interogare, NewOrder # 41; ;

procedura TForm1. FormCreate # 40; Expeditor: TObject # 41; ;

Lățimea, a: Integer;

DBGrid1. Opțiuni: = DBGrid1. Opțiuni - # 91; dgTitles # 93; ;







HeaderControl1. Secțiuni. Adăugați;

HeaderControl1. Secțiuni. Articole # 91; 0 # 93;. Lățime: = 12;

Tabelul 1. Exclusiv: = adevărat;

Tabelul 1. Activ: = Adevărat;

pentru un: = 1 la DBGrid1. Coloane. Numărătoarea face

Tabelul 1. Activ: = Fals;

Tabelul 1. Exclusiv: = Fals;

Tabelul 1. Activ: = Adevărat;

După ce THeaderControl a înlocuit antetul standard DBGrid, mai întâi reinițializăm (setați la False) pavilionul dgTitles din proprietatea Opțiuni a componentei DBGrid. Apoi vom adăuga o coloană în HeaderControl și setați lățimea egală cu 12. Aceasta va fi o coloană goală, care are aceeași lățime ca și starea coloana din stânga în DBGrid.
Apoi, trebuie să vă asigurați că tabela este deschisă pentru acces exclusiv (nu pot fi utilizați de alți utilizatori). Motivul pentru care voi explica un pic mai târziu.
Acum adăugați secțiunile la HeaderControl. Pentru fiecare coloană adăugată, vom crea același text în antet ca și în coloana DBGrid corespunzătoare. În buclă, trecem prin toate coloanele DBGrid și repetăm ​​textul coloanei și înălțimea acesteia. De asemenea, setăm valorile HeaderControl pentru proprietățile MinWidth și MaxWidth la lățimea coloanei corespunzătoare din DBGrid. Acest lucru va împiedica difuzoarele să își schimbe lățimea. Pentru redimensionarea coloanelor aveți nevoie de codificare suplimentară și am decis să nu vă lipsesc de această plăcere.






Acum, cel mai interesant. Vom crea un index pentru fiecare coloană din DBGrid. Numele indexului va fi același cu numele coloanei. Trebuie să închidem acest cod în construcția try..finally, deoarece există câmpuri care nu pot fi indexate (de exemplu, câmpurile Blob și Memo). O încercare de indexare a acestor câmpuri generează o excepție. Interceptăm această excepție și nu permitem clic pe această coloană. Aceasta înseamnă că coloanele care conțin câmpuri care nu sunt indexate nu vor răspunde la un click de mouse. Crearea acestor indexuri servește drept explicație pentru motivul deschiderii tabelului în modul de acces exclusiv. Și în cele din urmă închidem masa, aruncăm steagul de exclusivitate și din nou facem masa activă.
Ultimul pas. Când faceți clic pe HeaderControl, trebuie să activați indexul corect al tabelului. Creați un handler de evenimente OnSectionClick pentru componenta HeaderControl după cum se arată mai jos:

procedura TForm1. HeaderControl1SectionClick # 40;

HeaderControl: THeaderControl; Secțiunea: THeaderSection # 41; ;

Tabelul 1. IndexName: = secțiune. Text;

Asta e tot! După ce faceți clic pe titlul coloanei, valoarea proprietății tabelului IndexName devine egală cu antetul componentei HeaderControl.
Simplu și frumos, nu? Cu toate acestea, există o mulțime de locuri care trebuie îmbunătățite. De exemplu, un clic secundar ar trebui să reia ordinea de sortare. Sau abilitatea de a redimensiona coloanele. Încercați-l singur, nu este dificil!
îmbunătățiri
Aici este codul îmbunătățit în comparație cu versiunea anterioară a "Consiliului", este de a folosi numele câmpului în loc de antet ca nume de index.
Acest lucru îmbunătățește flexibilitatea. Modificările sunt indicate cu caractere cursive.

procedura TfrmDoc. FormCreate # 40; Expeditor: TObject # 41; ;

Dbgrid1. Opțiuni: = DBGrid1. Opțiuni - # 91; DGTitles # 93; ;

Headercontrol1. secțiuni. Adăugați;

Headercontrol1. Secțiuni. Articole # 91; 0 # 93;. Lățime: = 12;

pentru un: = 1 până la DBGRID1. Coloane. Numărătoarea face







Articole similare

Trimiteți-le prietenilor: