2012-07-26 8 views
5

Ho un DataGridView che visualizza un numero limitato di righe, mai più di 5. Questo DataGridView è posizionato su un controllo DataRepeater in modo che di solito è visualizzato molti volte sullo schermo. Ciò che voglio ottenere è che tutte le griglie vengono ridimensionate in base alla dimensione del loro contenuto in modo che non visualizzino barre di scorrimento se sono presenti 4 o 5 elementi o occupano spazio verticale aggiuntivo se solo 1 o 2 elementi sono presenti.Come dimensionare automaticamente un controllo datagridview di winforms, in modo che le sue righe siano sempre visibili

Le griglie contengono solo dati di testo. Sono controlli associati ai dati, quindi dovranno essere ridimensionati se l'origine dati sottostante cambia (suppongo che l'evento DataBindingComplete sia adatto).

Come posso ottenere questo risultato? Il conteggio delle file è l'opzione migliore? Grazie in anticipo.

+0

Ecco una risposta più precisa [DataGridView Auto Altezza -? Come autoSize DataGridView Altezza] (http://stackoverflow.com/questions/38816425/datagridview-auto-height-how-to-autosize-datagridview -altezza) –

risposta

13

Dal momento che il controllo è associato ai dati, vorrei impostare la proprietà Height sul DataGridView alla somma delle altezze delle righe (più un certo margine) in caso DataBindingComplete:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    var height = 40; 
    foreach (DataGridViewRow dr in dataGridView1.Rows) { 
     height += dr.Height; 
    } 

    dataGridView1.Height = height; 
} 
0

Questo valore può essere qualsiasi cosa Dovresti testare nella tua griglia per scoprire qual è il valore migliore per impostare l'altezza.

var height = 40; 

Modificato:

per trovare il valore reale per l'altezza, è necessario aggiungere la posizione della griglia di e un'altezza di intestazione. Qualcosa del genere.

0

Ho preso la risposta di hmqcnoesy e l'ho ampliata e ho creato una funzione per includere anche la larghezza. E da usare su qualsiasi griglia.

Nota: impostare AutoSizeCells = AllCells sulla griglia.

public static DataGridView SetGridHeightWidth(DataGridView grd, int maxHeight, int maxWidth) 
    { 
     var height = 40; 
     foreach (DataGridViewRow row in grd.Rows) 
     { 
      if(row.Visible) 
       height += row.Height; 
     } 

     if (height > maxHeight) 
      height = maxHeight; 

     grd.Height = height; 

     var width = 60; 
     foreach (DataGridViewColumn col in grd.Columns) 
     { 
      if (col.Visible) 
       width += col.Width; 
     } 

     if (width > maxWidth) 
      width = maxWidth; 

     grd.Width = width; 

     return grd; 
    }