Hallo,
ich und das DGV kämpfen wieder miteinander. Ich bin immer noch dabei CSVs zu importieren. Dabei soll die CSV ausgelesen werden und dann die Spalten den Feldern einer Datentabelle zugewiesen werden. Funktioniert soweit alles.
Jetzt möchte ich noch CSV-Dateien verarbeiten können, die keine Spaltenüberschriften haben. Das kann ja auch mal vorkommen. Aber das DGV nimmt von der Datatable, die ich als Datasource dem DGV zuweise, immer die erste Zeile und wandelt diese in den Header um.
Ich dachte, wenn ich den Header schon mal definiere und dann die Datatable zuweise, könnte das klappen. Nein, dann habe ich meine selbst eingestellten Headerspalten vor den Headerspalten aus der Datatable.
Übersehe ich da eine Eigenschaft des DGVs? Oder wie kann ich dem DGV sagen, dass es nicht die erste Zeile als Header nehmen soll?
Bye
Markus
ich und das DGV kämpfen wieder miteinander. Ich bin immer noch dabei CSVs zu importieren. Dabei soll die CSV ausgelesen werden und dann die Spalten den Feldern einer Datentabelle zugewiesen werden. Funktioniert soweit alles.
Jetzt möchte ich noch CSV-Dateien verarbeiten können, die keine Spaltenüberschriften haben. Das kann ja auch mal vorkommen. Aber das DGV nimmt von der Datatable, die ich als Datasource dem DGV zuweise, immer die erste Zeile und wandelt diese in den Header um.
Ich dachte, wenn ich den Header schon mal definiere und dann die Datatable zuweise, könnte das klappen. Nein, dann habe ich meine selbst eingestellten Headerspalten vor den Headerspalten aus der Datatable.
VB.NET-Quellcode
- Private Sub OpenFileDialog1_FileOk(sender As Object, e As CancelEventArgs) Handles OpenFileDialog1.FileOk
- Dim filePath As String = OpenFileDialog1.FileName
- TB_filename.Text = filePath
- Using reader = New StreamReader(filePath)
- Dim csv = New CsvReader(reader, CultureInfo.InvariantCulture)
- Using dr = New CsvDataReader(csv)
- Dim dt = New DataTable
- dt.Load(dr)
- 'CSV in dt geladen
- If CheckBox2.Checked = True Then
- DataGridView1.DataSource = dt
- Else
- For i = 1 To dt.Rows.Count
- Dim TeBoCol As New DataGridViewTextBoxColumn
- DataGridView1.Columns.Add(TeBoCol)
- With TeBoCol
- .HeaderText = "Spalte " & CStr(i)
- .Name = "Spalte" & CStr(i)
- End With
- Next
- DataGridView1.DataSource = dt
- End If
- '1. Zeile dt auslesen (Spaltenüberschriften)
- Dim csvspalten As New DataTable
- csvspalten.Columns.Add("ID")
- csvspalten.Columns.Add("Name")
- Dim zaehler As Integer = 0
- Dim row As DataRow = dt.Rows(0)
- 'Einzelne Spaltenüberschriften mit ID versehen und in csvspalten ablegen
- If CheckBox2.Checked = True Then
- For Each item As DataColumn In row.Table.Columns
- Dim R As DataRow = csvspalten.NewRow
- R("ID") = zaehler + 1
- R("Name") = item
- csvspalten.Rows.Add(R)
- zaehler = zaehler + 1
- Next
- Else
- For i = 1 To row.Table.Columns.Count
- Dim R As DataRow = csvspalten.NewRow
- R("ID") = zaehler + 1
- R("Name") = "Spalte " & CStr(i)
- csvspalten.Rows.Add(R)
- zaehler = zaehler + 1
- Next
- End If
- Dim dbfelder As New DataTable
- dbfelder.Columns.Add("ID")
- dbfelder.Columns.Add("Name")
- dbfelder.Columns.Add("Type")
- Dim feldname As New List(Of String) From {"DBFeld1", "DBFeld2", "DBFeld3", "DBFeld4", "DBFeld5"}
- db_feldnamen = feldname
- Dim feldtyp As New List(Of String) From {"String", "String", "String", "Integer", "String"}
- db_feldtypen = feldtyp
- For z = 1 To feldname.Count
- Dim A As DataRow = dbfelder.NewRow
- A("ID") = CStr(z)
- A("Name") = feldname(z - 1)
- A("Type") = feldtyp(z - 1)
- dbfelder.Rows.Add(A)
- Next
- Dim ComboCol As New DataGridViewComboBoxColumn
- DataGridView2.DataSource = dbfelder
- DataGridView2.Columns.Add(ComboCol)
- DataGridView2.Columns(0).Visible = False
- With ComboCol
- .HeaderText = "CSV-Feld"
- .Name = "CSV"
- .DataSource = csvspalten
- .DisplayMember = "Name"
- .ValueMember = "ID"
- End With
- End Using
- End Using
- End Sub
Übersehe ich da eine Eigenschaft des DGVs? Oder wie kann ich dem DGV sagen, dass es nicht die erste Zeile als Header nehmen soll?
Bye
Markus
8-Bit Nerd - Retro-Computer Junkie - Elektronik-Fuzzi - Lötkolben-Jongleur
Lord Luxors Retrogalerie llrg.me
Lord Luxors Retrogalerie llrg.me