DataGridView AutoFit e Fill

Ho 3 colonne nel mio DataGridView . Quello che sto cercando di fare è che le prime 2 colonne si adattino automaticamente alla larghezza del contenuto e che la terza colonna riempia lo spazio rimanente.

È ansible farlo in WinForms? Sto caricando i miei dati da un EF DataContext, se questo è un uso. Ho incluso un’immagine del suo aspetto attuale.

inserisci la descrizione dell'immagine qui

È necessario utilizzare la proprietà DataGridViewColumn.AutoSizeMode .

Puoi utilizzare uno di questi valori per la colonna 0 e 1:

AllCells: la larghezza della colonna si adatta per adattarsi al contenuto di tutte le celle della colonna, inclusa la cella dell’intestazione.
AllCellsExceptHeader: la larghezza della colonna si adatta al contenuto di tutte le celle della colonna, esclusa la cella dell’intestazione.
DisplayedCells: la larghezza della colonna si adatta per adattarsi al contenuto di tutte le celle della colonna che si trovano nelle righe attualmente visualizzate sullo schermo, inclusa la cella di intestazione.
DisplayedCellsExceptHeader: la larghezza della colonna si adatta per adattarsi al contenuto di tutte le celle della colonna che si trovano nelle righe attualmente visualizzate sullo schermo, esclusa la cella dell’intestazione.

Quindi si utilizza il valore Fill per la colonna 2

La larghezza della colonna si adatta in modo che le larghezze di tutte le colonne riempiano esattamente l’area di visualizzazione del controllo …

 this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

Come sottolineato da altri utenti, il valore predefinito può essere impostato a livello di DataGridView.AutoSizeColumnsMode con la proprietà DataGridView.AutoSizeColumnsMode .

 this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 

potrebbe essere:

 this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 

Nota importante:

Se la griglia è associata a un’origine dati e le colonne vengono generate automaticamente (la proprietà AutoGenerateColumns impostata su True), è necessario utilizzare l’evento DataBindingComplete per applicare lo stile. Le colonne AFTER sono state create.


In alcuni scenari (ad esempio, modifica il valore delle celle in base al codice), ho dovuto chiamare DataGridView1.AutoResizeColumns(); per aggiornare la griglia.

Questo è il mio approccio preferito …

 _dataGrid.DataBindingComplete += (o, _) => { var dataGridView = o as DataGridView; if (dataGridView != null) { dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } }; 

Basta modificare la proprietà dalla proprietà di controllo: AutoSizeColumnsMode:Fill

O per codice

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

Non testato ma puoi provare. Testato e funzionante. Spero tu possa giocare con AutoSizeMode di DataGridViewColum per ottenere ciò che ti serve.

Prova ad impostare

 dataGridView1.DataSource = yourdatasource;< --set datasource before you set AutoSizeMode //Set the following properties after setting datasource dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

Questo dovrebbe funzionare

Prova a fare,

  AutoSizeColumnMode = Fill; 
 public static void Fill(DataGridView dgv2) { try { dgv = dgv2; foreach (DataGridViewColumn GridCol in dgv.Columns) { for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++) { GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; GridCol.DataGridView.Columns[j].FillWeight = 1; } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 
 public void setHeight(DataGridView src) { src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType().Where(row => row.Visible).Sum(row => row.Height); } 

Prova questo :

  DGV.AutoResizeColumns(); DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;