Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: luigi67 - Dicembre 20, 2013, 07:35:03 pm

Titolo: ordinamento tabella
Inserito da: luigi67 - Dicembre 20, 2013, 07:35:03 pm
Salve a tutti
è la prima volta che scrivo su questo forum , usavo da tempo delphi 7 ed ora sono passato a lazarus e devo dire che lo trovo ottimi! Ho un problema sto sviluppando un'applicazione giusto per rimettermi in pari e vorrei fare il classico ordinamento facendo click sulla colonna. Nulla di più facile, ma in realtà non riesco a capire come funzionano gli indici con lazarus. Ho copiato ed incollato del codice che era presente nel seguentye wiki di lazarus

http://wiki.lazarus.freepascal.org/Grids_Reference_Page#Sorting_columns_or_rows_in_DBGrid_with_sort_arrows_in_column_header (http://wiki.lazarus.freepascal.org/Grids_Reference_Page#Sorting_columns_or_rows_in_DBGrid_with_sort_arrows_in_column_header)

ma non sono riuscito a farlo funzionare come vorrei.
Vorrei fare una cosa semplicissima: prima di tutto l'indice è unico e basato sul campo selezionato dalla colonna, secondo vorrei, facendo un secondo click, dargli l'ordine discendente, primo click ordine ascendente, secondo click ordine discendente, click su altra colonna cancella precedente indice e utilizza quello della colonna selezionata in modo ascendente.
Avrei pensato ad una soluzione che ritengo sicuramente funzionante, ma poco elegante e cioè aggiungere alla query il classico order by <nomecampo> desc o asc.
Uso un database firebird, un oggetto TSQLQuery, un datasource e una griglia, per la precisione un oggetto TrxDBGrid perché fa delle cose che mi servono e che non fa la griglia standard.
Una cosa che però all'oggetto TrxDBGrid non sono riuscito a fare fare è fare apparire delle immagini sulle intestazioni delle colonne (le classiche frecce su e giù dell'ordinamento  delle colonne). In pratica ho aggiunto un oggetto Timagelist, l'ho assegnato alla griglia attraverso la proprietà TitleImageList e poi cambio l'immagine con Column.Title.ImageIndex:=0/1.
 Se faccio tutto questo con un componente TDBGrid funziona correttamente, se lo faccio con  TrxDBGrid no sapreste dirmi dove sbaglio?
Grazie
Luigi