2012-11-23 16 views
9

Ich versuche, die Höhe einer Zeile automatisch anzupassen, und ich habe es sehr herausfordernd gefunden.Datagridview Zeile Autoresize

ich bereits diese Eigenschaft haben:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells. 

Ich habe es auch diese andere Methode gemacht:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders) 

Zeile für Zeile und auch, indem Sie diese:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells) 

Und auch die Höhe der Zeile zu einem großen Wert hartcodiert, und es hat auch nicht funktioniert !! Alle Zeilen werden mit ihren Standardhöhen angezeigt.

Keine von diesen funktioniert. Mir gehen die Optionen aus.

Die meisten Zeilen in der Datagridview müssen nicht in der Größe geändert werden. Aber einer von ihnen ist mit Werten wie diesen gefüllt:

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

Ich meine, kurze Werte, aber in verschiedenen Zeilen. Ich muss sie in verschiedenen Zeilen zeigen, kann sie nicht alle zusammen zeigen. Aber die Datagridview zeigt nur die erste und alle anderen sind ausgeblendet, da die Zeile nicht autorisiert ist.

Jede Idee über eine andere Möglichkeit, es zu tun.

Antwort

3

Ich habe die Lösung für dieses Problem gefunden. Anstatt mit den Eigenschaften für die automatische Größe des Rasters oder der Zeilen zu arbeiten, hätte ich den Umbruchmodus verwenden sollen, der auf alle Zellen des Rasters angewendet werden soll.

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

Dies wird auf alle Zellen angewendet und es funktioniert.

+0

Ich bin froh, dass Sie die Lösung gefunden haben (ich hatte vermutet, dass Sie bereits den Umbruchmodus eingestellt haben und die mehreren Zeilen über den Rasterzellenbereich laufen). Ich werde meine Antwort belassen, da sie für ein anderes Problem korrekt ist (wenn Sie eine Ihrer Zellen aktualisieren und die Länge der Daten erhöhen, wird die Größenänderung nicht automatisch ausgelöst). –

+2

Oh - und markieren Sie dies als die Antwort, so dass die Frage aus der unbeantworteten Liste fällt. –

5

Sie müssen die Resize-Methode aufrufen nach die Daten wurden geändert. Aus dem MSDN-Artikel unter DataGridView.AutoResizeRows():

Die Zeilenhöhen werden nur einmal pro Methodenaufruf angepasst; Wenn sich der Inhalt der Zeilen später ändert, werden die Zeilen nicht automatisch anpassen.

Dies bedeutet, dass Sie die Methode nach dem ersten und nachfolgenden Laden des Rasters aufrufen müssen. Wenn Sie diesen Code im Controller des übergeordneten Formulars aufrufen, ist die Datenbindung noch nicht erfolgt, sodass die Daten nicht vorhanden sind.

Zum ersten Laden mit der DataBindingComplete Veranstaltung:

dataGridView1.DataBindingComplete += new 
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); 

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

Für späteres Updates zu Zellen müssen Sie sich den besten Platz finden.

+0

Der Grund, warum Ihr aktueller Ansatz nicht funktioniert, ist wahrscheinlich, dass Sie Ihren Code innerhalb des Formularkonstruktors oder des Onload-Ereignisses haben. –

+0

Nein, ich mache es tatsächlich, nachdem die Gridsource auf den Datagridview gesetzt wurde. Es ist bereits belegt. Es ist das letzte, was ich mache. – monican

+0

@ user1062568 wann machst du es? In welchem ​​Ereignishandler? Selbst wenn Sie dies tun, nachdem die Quelle festgelegt wurde, ist dies nicht genug, Sie müssen es tun, nachdem die Datenbindung abgeschlossen ist. Wenn Sie die Quelle festlegen und dann die Größenänderung beispielsweise im Formularkonstruktor aufrufen, wird dadurch die Höhe nicht geändert. –