2012-11-23 10 views
9

Sto provando a regolare automaticamente l'altezza di una riga e l'ho trovato molto impegnativo.Rigenera automaticamente la riga di Datagridview

ho già impostare questa proprietà:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells. 

ho anche fatto usando questo altro metodo:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders) 

E anche riga per riga, usando questo:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells) 

E anche anche hardcoded l'altezza della riga a un valore elevato, e non ha funzionato neanche !! Tutte le righe sono mostrate con le loro altezze predefinite.

Nessuno di questi ha funzionato. Sono a corto di opzioni.

Non è necessario ridimensionare la maggior parte delle righe nella vista datagrid. Ma uno di loro è pieno di valori come questi:

"a" + "\ n" + b + "\ n" + "c" + "\ n" + "d" + "\ n" + " e "

Voglio dire, valori brevi ma in linee diverse. Devo mostrarli in diverse linee, non posso mostrarli tutti insieme. Ma il datagridview mostra solo il primo e tutti gli altri sono nascosti, perché la riga non autorizza.

Qualche idea su qualsiasi altro modo per farlo.

risposta

3

Ho trovato la soluzione a questo problema. Invece di lavorare con le proprietà autosize della griglia o delle righe, avrei dovuto usare la wrapmode da applicare a tutte le celle della griglia.

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

Ciò si applica a tutte le cellule e funziona.

+0

Contento di aver trovato la soluzione (presumevo che avessi già impostato wrapmode e stavo vedendo le linee multiple che traboccavano dall'area della cella della griglia). Ho intenzione di lasciare la mia risposta poiché è corretto per un altro problema (se si aggiorna una qualsiasi delle tue celle aumentando la lunghezza dei dati, il ridimensionamento non si innescherà automaticamente). –

+2

Oh - e contrassegnalo come la risposta in modo che la domanda rimandi alla lista senza risposta. –

5

È necessario chiamare il metodo di ridimensionamento dopo i dati sono stati modificati. Dall'articolo MSDN DataGridView.AutoResizeRows():

Le altezze di riga vengono regolate una sola volta per chiamata di metodo; se il contenuto di delle righe viene modificato in seguito, le righe non saranno automaticamente regolate da .

Ciò significa che è necessario chiamare il metodo dopo il primo e qualsiasi successivo caricamento della griglia. Se si sta chiamando questo codice all'interno del controller del modulo padre, l'associazione dei dati non è ancora avvenuta, quindi i dati non sono presenti.

Per la prima carico utilizzando l'evento DataBindingComplete:

dataGridView1.DataBindingComplete += new 
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); 

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 
} 

Per gli aggiornamenti successivi alle cellule che sarà necessario trovare il posto migliore da soli.

+0

Il motivo per cui l'approccio corrente non funziona è probabile che il codice sia presente nel costruttore di moduli o nell'evento onload. –

+0

No, lo faccio effettivamente dopo che la gridsource è stata impostata su datagridview. È già popolato. È l'ultima cosa che faccio. – monican

+0

@ user1062568 quando lo fai? In quale event handler? anche se lo si fa dopo che è stata impostata la sorgente, non è sufficiente, è necessario farlo dopo che il database è completo. Se si imposta l'origine e quindi si chiama ridimensiona tutto nel costruttore del modulo, ad esempio, questo non cambierà l'altezza. –