Moin,
Ich verzweifele gerade an folgendem Problem:
Ich habe ein einfaches Projekt mit einem DataSet mit einer DataTable und der entsprechenden Bindingsource.
Die DataTable habe ich in der IDE angelegt und durch Ziehen aus "Datenquellen" auf die Form das entsprechende DGV angelegt.
Nun möchte ich Daten importieren und habe dazu folgenden Code geschrieben, der auf einem Beispiel aus Microsoft / Learn stammt:
Imports System.ComponentModel
Public Class frmKundendaten
Public ImportZeile As String()
Private Sub ImportKundencsvToolStripMenuItem_Click(sender As Object, e As _
EventArgs) Handles
ImportKundencsvToolStripMenuItem.Click
If MessageBox.Show("Beim Import werden alle vorhandenen Daten gelöscht bzw." & _
"durch die importierten Daten ersetzt." & vbLf & vbLf _
& "Import wirklich starten?", "Hinweis", MessageBoxButtons.OKCancel, _
MessageBoxIcon.Question) = DialogResult.OK Then
Using OfdImport As New OpenFileDialog With {
.DefaultExt = "*.csv",
.FileName = "Kunden.csv",
.AddExtension = True,
.ValidateNames = True,
.Multiselect = False,
.ReadOnlyChecked = True,
.CheckFileExists = True,
.Filter = "CSV-Dateien|*.CSV|All files (*.*)|*.*"
}
If OfdImport.ShowDialog = DialogResult.OK Then
Using MyReader As New FileIO.TextFieldParser(OfdImport.FileName, _
System.Text.Encoding.Default)
MyReader.TextFieldType = FileIO.FieldType.Delimited
MyReader.SetDelimiters(";")
ImportZeile = Nothing
Try
'Kopfzeile vorlesen
ImportZeile = MyReader.ReadFields()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
While Not MyReader.EndOfData
Try
ImportZeile = MyReader.ReadFields()
If ImportZeile(0) IsNot "" Then
Application.DoEvents()
DTKundenBindingSource.AddNew()
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & "is not valid and will be" & _
"skipped.")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End While
End Using
MessageBox.Show("Kundendatenimport abgeschlossen", "Hinweis", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Using
End If
End Sub
Private Sub DTKundenBindingSource_AddingNew(sender As Object, e As _
AddingNewEventArgs) Handles DTKundenBindingSource.AddingNew
e.NewObject = Kunde.CreateKunde()
End Sub
End Class
Public Class Kunde
Private KdNr As Int32 = 0
Private KdName As String = String.Empty
Private KdLogin As String = String.Empty
Private KdPw As String = String.Empty
Private KdGetBE As Boolean = False
Private KdSendBR As Boolean = False
Private KdSendOK As Boolean = False
Private KDSendPL As Boolean = False
Private KDSendPLF As Boolean = False
Private KDSendKdPL As Boolean = False
Private KDSendKdPLF As Boolean = False
Private Sub New()
KdNr = CType(frmKundendaten.ImportZeile(0), Int32)
KdName = frmKundendaten.ImportZeile(1)
KdLogin = frmKundendaten.ImportZeile(2)
KdPw = frmKundendaten.ImportZeile(3)
If frmKundendaten.ImportZeile(5) = "-1" Then
KdGetBE = True
End If
If frmKundendaten.ImportZeile(6) = "-1" Then
KdSendBR = True
End If
If frmKundendaten.ImportZeile(7) = "-1" Then
KdSendOK = True
End If
If frmKundendaten.ImportZeile(8) = "-1" Then
KDSendPL = True
End If
If frmKundendaten.ImportZeile(9) = "-1" Then
KDSendPLF = True
End If
If frmKundendaten.ImportZeile(10) = "-1" Then
KDSendKdPL = True
End If
If frmKundendaten.ImportZeile(11) = "-1" Then
KDSendKdPLF = True
End If
End Sub
Public Shared Function CreateKunde() As Kunde
Return New Kunde()
End Function
End Class Für jeden Datensatz, der aus der Importdatei importiert werden soll, kommt die Meldung:
Objekte, die zur Liste einer BindingSource hinzugefügt werden, müssen alle _
denselben Typ haben. Die Felder der Klasse "Kunde" entsprechen den Feldern der DataTable "DTKunden". Das habe ich mehrfach kontrolliert.
Was mache ich falsch? Stehe total auf dem Schlauch.
Herzlichen Dank. |