Newsgroup: it.comp.lang.delphi
Titolo: Colonne in DBGrid

Ciao Ragazzi,
innanzittutto volevo ringraziarvi per i suggerimenti che mi avete dato su
come utilizzare
DB Access con Delphi, sono stati preziosissimi.
Ho quest'altro problema: Nella mia applicazione ho inserito un DBGrid con 11
colonne.
Quando lancio l'applicazione le colonne sono sempre molto larghe ( Width
304)  nonostante le riduca ogni volta sia a Run-Time che a Design-Time;
mentre io le vorrei impostare come default molto più strette ( Width 64
oppure 70 - 80 ecc..).
Come posso fare?
Devo settare qualche proprietà del DBGrid?
Grazie.

 ha scritto nel messaggio
news:mBkp8.97651$1S3.3...@twister1.libero.it...


Ciao a Tutti,
qualche giorno fa ho inviato una mail in cui chiedevo aiuto sulle colonne
nel DBGrid.
Ve lo ripropongo poichč non sono riuscito a risolverlo.
Ho inserito nella form un DBGrid con diverse colonne; io vorrei cambiare
l'ordine della visualizzazione delle colonne (es. da 1 2 3 a 3 2 1) facendo
clic sul titolo della colonna?
Come posso fare?
se devo usare usare una istruzione SQL potreste essere cosě gentili da
spiegarmi i componenti da utilizzare e come li devo settare? In quanto con i
suggerimenti che mi hanno dato non sono stato in grado di farlo perchč non
conosco l'SQL e i relativi componenti.
Grazie Infinite.

Ciao a Tutti,
qualche giorno fa ho inviato una mail in cui chiedevo aiuto sulle colonne
nel DBGrid.
Ve lo ripropongo poichč non sono riuscito a risolverlo.
Ho inserito nella form un DBGrid con diverse colonne; vorrei ora cambiare
l'ordine della visualizzazione delle colonne (es. da 1 2 3 a 3 2 1) facendo
clic sul titolo della colonna.
Come posso fare?
Se devo usare usare una istruzione SQL potreste essere cosě gentili da


Mljet Dubrovnik wrote:
... snip ...
Metti una TQuery, un TDataSource, e una TDBGrid sulla form.
Collega la TDbGrid al TDataSource.
Collega il TDataSource alla TQuery (cioè al DataSet, quindi potrebbe 
essere una TIbQuery, TClientDataSet, TIbSQL, ...)
Nella proprietà SQL scrivi la query sulla base dati, ad esempio
SELECT
   A.CAMPO1, A.CAMPO2, A.CAMPO3, A.CAMPO4, A.CAMPO5,
   B.CAMPO6, B.CAMPO7
FROM TABELLA1 A JOIN TABELLA2 B ON A.CAMPON=B.CAMPOM
ORDER BY A.CAMPO1 ASC
Supponiamo che l'ORDER BY sia l'ultimo elemento della SELECT (di solito 
lo è). Notare che se vuoi un ordinamento _CI DEVE ESSERE_ la clausola 
ORDER BY.
Adesso però dipende da come è il tuo SQL, e da cosa supporta il DBMS che 
usi.
Nell'evento OnTitleClick() della griglia scrivi un codice del tipo (non 
ricordo i nomi dei metodi esattamente, ma ci dovrei andare vicino)
Uso il Tag della griglia (ma puoi usare una variabile pubblica o quello 
che ti pare) per memorizzare l'ultimo ordinamento effettuato.
const OrderBy = 'ORDER BY ';
var ii: integer; bb: boolean; qq: TQuery; s0, s1;
begin
// controllo se non c'è niente da riordinare...
   if not Assigned(DbGrid1.DataSource) then exit;
   qq := TQuery (DbGrid.DataSource.Dataset);
   if not Assigned(qq) then exit;
   if not qq.Active then exit;
// Ok, proseguo
   ii := Column.Index + 1; // siccome parte da 0 e Tag è per default 0
   bb := Abs(DbGrid1.Tag) = ii;
   if bb then ii := -DbGrid1.Tag;
   DbGrid1.Tag := ii;
// adesso decidiamo come ordinare e riprepariamo il testo della query
   s0 := OrderBy+Column.FieldName;
   if ii < 0
     then s1 := s0 + ' DESC'
     else s1 := s0 + ' ASC';
   s0 := qq.SQL.Text;
   ii := Pos ( OrderBy, s0 );
   if ii > 0
     then Delete ( s0, ii, Length(s0)-ii);
   s0 := s0 + s1;
   qq.DisableControls;
   try
     qq.Close;
     qq.Sql.Text := s0;
     qq.Active := True;
   finally
     qq.EnableControls;
   end;
end;
Dovrei esserci andato vicino.
Buon lavoro.