DataGridView - Spaltenbreite

18/11/2008 - 20:18 von Manfred Zirk | Report spam
Hallo Leute,

ich habe ein DataGridView mit mehreren Spalten.
Die Spaltenbreite ist bei allen Spalten bis auf die letzte Spalte auf
"AllCells" eingestellt.
Die letzte Spalte steht auf "Fill"

Jetzt würde ich erwarten, das die Spaltenbreite sich in jeder Spalte außer
der letzten Spalte nach der Breite des jeweils breitesten Zellinhalts richtet.

Passiert aber nicht so richtig. Tatsàchlich werden die ersten Spalten
umgebrochen, obwohl der Wrapmode auf False steht.
Trotzdem wird die letzte Spalte verbreitert.

Ist für mich irgendwie nicht nachvollziehbar.

Hat jemand einen Tip, warum die Spaltenbreiten anscheinend ein Eigenleben
haben.

Grüße

Manfred
 

Lesen sie die antworten

#1 Peter Götz
19/11/2008 - 08:21 | Warnen spam
Hallo Manfred,

ich habe ein DataGridView mit mehreren Spalten.
Die Spaltenbreite ist bei allen Spalten bis auf die
letzte Spalte auf "AllCells" eingestellt.
Die letzte Spalte steht auf "Fill"



Wie sieht das denn in konkretem Code aus?


Jetzt würde ich erwarten, das die Spaltenbreite sich
in jeder Spalte außer der letzten Spalte nach der
Breite des jeweils breitesten Zellinhalts richtet.



Vorausgesetzt dass die ersten Spalten die Einstellung

DGV.Columns(x).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.AllCells

haben und die letzte Spalte die Einstellung

DGV.Columns(y).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.Fill

hat, sollten sich die Spaltenbreiten wie gewünscht einstellen.

Passiert aber nicht so richtig. Tatsàchlich werden
die ersten Spalten umgebrochen, obwohl der
Wrapmode auf False steht.
Trotzdem wird die letzte Spalte verbreitert.



Dieses Verhalten kann ich hier so nicht nachvollziehen.

Ist für mich irgendwie nicht nachvollziehbar.



Ohne Deinen konkreten Code zu kennen ist es kaum
möglich, eine Fehlerursache zu erkennen.

Hat jemand einen Tip, warum die Spaltenbreiten
anscheinend ein Eigenleben haben.




Hier mal ein Beispiel bei dem 2 von 3 Spalten an den
jeweils làngsten Text angepasst werden und die 3. (rechte)
Spalte den verbleibenden Raum ausfüllt.

' /// Code in einer leeren Form
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGV = New DataGridView
DGV.Dock = DockStyle.Fill
Me.Controls.Add(DGV)

CreateData()

With DGV
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.DataSource = mDV

.Columns(0).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.AllCells

.Columns(1).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.AllCells

.Columns(2).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.Fill

.AutoResizeColumns()
End With

End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("SText", GetType(String))
.Columns.Add("LText", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, True)
DR.Item(2) = MonthName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)
End Sub
End Class
' \\\ E N T E

Mehr Beispiele zum DataGridView findest Du unter
www.gssg.de -> Visual Basic -> VB.net


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)



Grüße

Manfred

Ähnliche fragen