Ich habe ein DataGridView, in dem verschiedene DataTables angezeigt werden sollen. Das hat auch bisher wunderbar funktioniert, plötzlich bekomme ich bei der zweiten Zuweisung des DataTables zur BindingSource eine NullPointerException. Ich kann mich aber nicht erinnern irgend etwas geändert zu haben was darauf Einfluss hat.
Ich hab wegen einem Beispiel aus dem Internet dann zwei BindingSource erstellt und dem DGV die neue BindingSource zugewiesen - selber Fehler, diesmal bei der Zuweisung der BindingSource.
Meine zwei Funktionen (egal in welcher Reihenfolge aufgerufen: die erste geht, die zweite bringt Fehler bei der Zuweisung der BindingSource)
Private WithEvents bsData As New BindingSource
Private WithEvents bsSData As New BindingSource
Friend dtStat As New DataTable
Friend dtListe As New DataTable Private Sub Statistik()
...
Dim ds As New DataSet
Try
'------abrufen-------
ds = gSKWSW.SKWSExeCommand(cmd, ...)
'--------------------
lbStat.Text = "überfällige Teile: " & ds.Tables("curA").Rows( _
0).Item(1) & " (" & ds.Tables("curA").Rows(0).Item(0) & "" & _
"Schritte)"
'zwei Spalten an dt anhängen
If Not dtStat.Columns.Contains("MACHBAR") Then
dtStat = ds.Tables("curB")
dtStat.Columns.Add(New DataColumn("MACHBAR"))
dtStat.Columns.Add(New DataColumn("MENGE"))
Else
dtStat.Rows.Clear()
dtStat.Merge(ds.Tables("curB"))
End If
'zwei neue Spalten mit Daten aus zweitem dt füllen
For Each dr As DataRow In ds.Tables("curD").Rows
For Each drB As DataRow In dtStat.Rows
If drB.Item("APLNR") = dr.Item("APLNR") Then
drB.Item("MACHBAR") = dr.Item("TEILE")
drB.Item("MENGE") = dr.Item("SOLLMENGE")
End If
Next
Next
DataGridView1.DataSource = bsSData
bsSData.DataSource = dtStat
DataGridView1.DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(2).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(1).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleLeft
LinkStat.Visible = True
DataGridView1.Columns("KAPAZITAET").Visible = False
cbStatistik.Visible = True
btStatistik.Visible = True
Catch ex As Exception
Dim strMsg As String = String.Format("Die Statistik konnte nicht" & _
"abgerufen werden" + vbCrLf + " {0} - {1}.{2}", ex.Message, _
MyBase.Name(), "Statistik")
MessageBox.Show(strMsg, "Fehler", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Exit Sub
End Try Friend Sub Auftraege(ByVal ap As String)
...
Dim ds As New DataSet
'--------------------
ds = gSKWSW.SKWSExeCommand(cmd, ...)
'--------------------
Catch ex As Exception
Dim strMsg As String = String.Format("Die Auftragsdaten konnten" & _
"nicht aus der Datenbank geladen werden." + vbCrLf + " {0} -" & _
"{1}.{2}", ex.Message, MyBase.Name(), "Auftraege")
gLogFile.Write(strMsg, True)
MessageBox.Show(strMsg, "Fehler", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Exit Sub
End Try
dtListe = ds.Tables("curA") 'Für Druckliste wegspeichern
DataGridView1.DataSource = bsData
bsData.DataSource = dtListe 'Anzeigen
... Kann irgend jemand meinen Denkfehler erkennen? |