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

Voglio rendere visibili tutte le colonne della mia DBGrid a runtime.
Per farlo scrivo il codice:
DBGrid1.Columns [0].Visible:=True;
DBGrid1.Columns [1].Visible:=True;
DBGrid1.Columns [2].Visible:=True;
DBGrid1.Columns [3].Visible:=True;
e funziona.
La mia domanda č: c'č un modo per renderle visibili tutte senza dover 
ripetere una riga di codice per ciascuna?
Grazie 

conosci la prop columns: la usi.
Vedi la guida in linea.


ho guardato e non ho trovato niente che dica se si può fare o meno. Ho il 
sospetto che non si possa fare, ma non ne sono sicuro. Se qualcuno 
gentimente me lo può confermare? 

Items property (TDBGridColumns)
Lists the columns in the collection.
Delphi syntax:
property Items[Index: Integer]: TColumn default;
C++ syntax:
__property TColumn* Items[int Index] = {read=GetColumn,
write=SetColumn};
Description
Use Items to access individual columns. The value of the Index
parameter corresponds to the Index property of TColumn. It represents
the position of the column in the data grid.
Items is the default property of TDBGridColumns. This means that the
property name, Items, can be omitted when referring to columns of the
TDBGridColumns object. Thus, the line
FirstCol := DBGrid1.Columns.Items[0];
can also be written
FirstCol := DBGrid1.Columns[0];
Questo lo chiami niente?
AS

 DBGrid1.Columns [3].Visible:=True;
a parte che sarebbe più conveniente iterarle con un ciclo tipo
with DBGrid1 do
  for i := 0 to Pred(Columns.Count) do
     Columns[i].Visible := True
esiste la proprietà Visible dei campi persistenti!
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)


si ma a proposito della mia domanda cosa me ne faccio? 


cioč? 

 cioč? 
ops, credevo che il significato fosse intuitivo!
Se un campo persistente del tuo dataset non ha la prorpietą Visible 
impostata a True, esso non sarą visibile nella DBGrid.



appunto.
io ho impostato la proprietà visible dei campi persisteni a false. Poi a run 
time rendo visibili solo quelli che voglio quando voglio.
io volevo solo sapere se esiste un modo per impostare la proprietà visible 
di più campi senza dover scrivere una riga di codice per ogni colonna e 
senza dover usare un ciclo come hai detto tu (a questo punto faccio prima ad 
impostarle una alla votla). 

 faccio prima ad impostarle una alla votla). 
dipende da cosa ti serve. La gamma di soluzioni (come sempre, nella 
progettazione di qualsiasi cosa) č ampia. 
Banalmente, qualcosa del genere - scritto al volo:
type
  TView = (vwProfileA, vwProfileB, vwProfileC);
procedure ShowProfile(Grid: TDBGrid; View: TView);
  procedure ShowColumn(Index: Integer);
  begin
    Grid.Columns[Index].Visible := True
  end;
var
  i: Integer;
begin
  for i := 0 to Pred(Grid.Columns[i].Visible := False;
  case View of
    vwProfileA:
      begin
        ShowColumn(1);
        ShowColumn(3);
      end;
    vwProfileB:
      begin
        ShowColumn(0);
        ShowColumn(1);
        ShowColumn(2);
      end;
    vwProfileC:
      begin
        ShowColumn(0);
        ShowColumn(1);
      end;
  end
end;
Questo č solo uno spunto. Sarebbe meglio effettuare la gestione di questi 
"profili" di viste direttamente sui fields, in base al loro nome; si 
potrebbe volere una gestione pių approfondita dei profili, anche con le 
etichette dei campi ecc...


   for i := 0 to Pred(Grid.Columns[i].Visible := False;
andava scritto cosě
  for i := 0 to Pred(Grid.Columns) do
    Grid.Columns[i].Visible := False;
  //nascondiamo prima tutte le colonne


 ha scritto nel messaggio 
news:uMwye.116190$75.51...@news4.tin.it...


 Non capisco il problema... col ciclo for risolvi in due righe.
era una curiosità.
visto che devo rendere visibili e invisibili le colonne diverse volte, 
sarebbe stato comodo se ci fosse stato un metodo per farlo scrivendo una 
sola riga di codice anzichè ripeterlo per ogni colonna o di fare un ciclo 
for. 



potresti usare la proprietà tag dei campi persistenti per formare i gruppi
di colonne, gruppo con tag 0, grupo con tag 1 ecc, poi pèuoi fai la
selezione di quale gruppo di campi visualizzare tramite un RadioGroup 
procedure TForm1.RadioGroup1Click(Sender: TObject);
var
  i: smallint;
begin
  for i := 0 to Table1.FieldCount - 1 do
    Table1.Fields[i].Visible := RadioGroup1.ItemIndex =
Table1.Fields[i].Tag;
end;
oppure un ComboBox
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i: smallint;
begin
  for i := 0 to Table1.FieldCount - 1 do
    Table1.Fields[i].Visible := ComboBox1.ItemIndex = Table1.Fields[i].Tag;
end;
-- 
Ciao, Anto', [38, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Oggi c'è una grande battaglia di idee, ma alla 
fine, non ci saranno ne vinti, ne vincitori, ne idee!"
S. Benni da Elianto

 ha scritto nel messaggio 
news:JYRye.40490$h5.17...@news3.tin.it...

cmq se vuoi farlo con una sola riga metti il ciclo in una procedura 
(metodo).
Ciao Giorgio