.NET madness featuring a TabControl, a DataGridView and some HeaderCells
Dienstag, 8.3.2016, 11:46 > daMaxI think I just found a bug in the .NET-Framework (v4.5). I can reproduce this in VS2015 in Visual Basic, I haven't tried it in C# as of yet.
Here's what I wanted to achieve:
Task: Create a Windows Form with a Tabcontrol. The second tab has a DataGridView. This DataGridView should show some values in each row's HeaderCell.
The usual approach:
1. Create a new Form. Add a TabControl. The first TabPage is empty:
the second TabPage features a DataGridView:
Please note that initially the first TabPage is selected!
2. In your Form.New(), create a DataTable and databind it to the DataGridView:
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Dim dt As New DataTable("SomeLines")
Dim col As DataColumn
col = New DataColumn("Col 1", Type.GetType("System.String"))
dt.Columns.Add(col)
col = New DataColumn("Col 2", Type.GetType("System.String"))
dt.Columns.Add(col)
For i As Integer = 0 To 10
Dim row As DataRow = dt.NewRow()
row(0) = "BLA" & i
row(1) = "something"
dt.Rows.Add(row)
Next
Me.DataGridView1.DataSource = dt
End Sub
3. In the Load()-Event of the form, write your HeaderCell.Values:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
For i As Integer = 0 To Me.DataGridView1.RowCount - 1
Me.DataGridView1.Rows(i).HeaderCell.Value = _
Me.DataGridView1.Rows(i).Cells(0).Value
Next
End Sub
The bug: The row headers are always empty!
But: if you CTRL-X / CTRL-V the DataGridView to the first TabPage, the code magically works:
The workaround: Before writing the HeaderCell-contents, make sure that the TabPage featuring the DataGridView is selected! You may deselect it afterwards:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.TabControl1.SelectedIndex = 1
For i As Integer = 0 To Me.DataGridView1.RowCount - 1
Me.DataGridView1.Rows(i).HeaderCell.Value = Me.DataGridView1.Rows(i).Cells(0).Value
Next
Me.TabControl1.SelectedIndex = 0
End Sub
Result:
Here's the Visual-Studio-Solution for download in case you want to reproduce the bug: DataGridViewHeaderCells.zip
I've got to write this to StackOverflow tonight. Finding this took me nearly a day! Damn!!
Antworten
Halte Dich bitte an die Spielregeln. Welche Emoticons du verwenden kannst, steht hier.
Um hier kommentieren zu können, musst Du einen beliebigen Namen sowie eine beliebige E-Mail-Adresse angeben. Diese Daten werden dann erstmal zur Spamerkennung in die USA geschickt, dort und danach auch auf meinem Server gespeichert. Mit dem Absenden Deines Kommentars erklärst Du Dich damit und den hier geltenden Datenschutzbestimmungen (insbesondere dem Abschnitt Kommentarfunktion) einverstanden. Wenn Du damit nicht einverstanden bist, lass das Kommentieren bleiben, aber dann deinstalliere bitte auch sofort WhatsApp und verabschiede Dich von Facebook. Kommentarabonnements werden automatisch nach 3 Monaten gelöscht.
Wer HTML kann, ist klar im Vorteil. Diese Tags sind erlaubt:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Bei der Menge an Spam-Kommentaren passiert es hin und wieder, dass ein Kommentar vom Spamfilter gefressen wird. Bitte sei mir nicht böse aber ich habe weder Zeit noch Lust, solch verloren gegangenen Kommentaren hinterher zu forschen. Wenn das öfters passiert, schreib' mir 'ne Mail damit ich dich whitelisten kann.