Ich habe eine CSV-Datei, die ich in einem Kombinationsfeld in einer Datenrasteransicht laden. Meine csv ist wie folgt:Auswahl aus einem Kombinationsfeld mit Daten aus CSV in vb.net
prodname,prodcode,amt
prodname1,prodcode1,amt1
prodname2,prodcode2,amt2
prodname
ist, was ich in der Combobox in der Datagridview bin anzeigt.
Was ich will ist, wenn ich prodname1
, prodcode1
und amt1
wird in der gleichen Zeile in der Datenrasteransicht angezeigt werden. Ich fange gerade an, in vb.net herumzufummeln und werde dankbar sein, wenn mir jemand hilft.
Dies ist, was ich jetzt haben:
Dim cmb As New DataGridViewComboBoxColumn()
cmb.HeaderText = "Product Name"
cmb.Name = "cmb"
DataGridView2.Columns.Add(cmb) 'code for a combobox column in datagridview
Dim filename As String
Dim dt As New DataTable
filename = "/file/path/here"
Dim sr As New IO.StreamReader(filename)
Dim newline() As String = sr.ReadLine.Split(","c)
dt.Columns.AddRange({New DataColumn(newline(0)), _
New DataColumn(newline(1))})
While (Not sr.EndOfStream)
newline = sr.ReadLine.Split(",")
Dim newrow As DataRow = dt.NewRow
cmb.Items.Add(newline(0))
newrow.ItemArray = {newline(1)}
dt.Rows.Add(newrow)
End While
DataGridView2.DataSource = dt
UPDATE:
ich meinen Code aktualisiert pro Antwort Alex, aber ich noch einen Fehler.
Dim cmb As New DataGridViewComboBoxColumn()
cmb.HeaderText = "Product Name"
cmb.Name = "cmb"
DataGridView1.Columns.Add(cmb)
AddHandler DataGridView1.CellValueChanged, AddressOf DataGridView1_OnCellValueChanged
AddHandler DataGridView1.CurrentCellDirtyStateChanged, AddressOf DataGridView1_OnCurrentCellDirtyStateChanged
Dim filename As String
filename = "/path/to/file"
Dim sr As New IO.StreamReader(filename)
Dim newline() As String = sr.ReadLine.Split(","c)
dt.Columns.AddRange({New DataColumn(newline(0)), _
New DataColumn(newline(1))})
While (Not sr.EndOfStream)
newline = sr.ReadLine.Split(","c)
Dim newrow As DataRow = dt.NewRow
cmb.Items.Add(newline(0))
'newrow.ItemArray = {newline(1)}
dt.Rows.Add(newrow)
dicItems.Add(newline(0), newline.Skip(1))
End While
DataGridView1.DataSource = dt
End Sub
Private Sub DataGridView1_OnCellValueChanged(ByVal s As Object, ByVal e As DataGridViewCellEventArgs)
If e.ColumnIndex = 0 Then
Dim changedCell = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
For i As Integer = 0 To dt.Columns.Count
dt.Rows(e.RowIndex).Item(i) = dicItems(changedCell.Value.ToString)(i) **error here**
Next
End If
End Sub
Private Sub DataGridView1_OnCurrentCellDirtyStateChanged(ByVal s As Object, ByVal e As EventArgs)
If DataGridView1.IsCurrentCellDirty Then
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
- er verwendet Semikolons auf seine Probe, aber ich zu meinem Komma bin kleben. :)
Der Fehler sagt Cannot find column 2
oder wenn ich etwas zwicken, wird der Fehler The given key was not present in the dictionary
auf der gleichen Linie
hallo! Danke für Ihre Antwort.aber ich habe Fragen, dieser Code gibt mir eine Warnung "newline.Skip (1)" und wenn ich das Programm ausführen, nichts in meinem dgv angezeigt wird. und zweitens: Der angegebene Schlüssel war nicht im Wörterbuch vorhanden, wenn ich etwas in der Combobox auswähle. Es ist o diese Zeile 'dt.Rows (e.RowIndex) .Item (i) = dict (changedCell.Value.ToString) (i)' – predator
Okay, ich habe den Teil newline.skip herausgefunden. Darin liegt immer noch ein Fehler. 'Der angegebene Schlüssel war im Dictionary nicht vorhanden.' – predator
In diesem Fall hat' changedCell' einen Wert, den Sie vorher nicht in den Dictionray eingefügt haben. Setzen Sie Haltepunkte in 'dicItems.Add (newline (0), newline.Skip (1))' und 'changedCell.Value.ToString', um zu sehen, was passiert. Vielleicht haben Sie eine leere Zeile in Ihrer Textdatei? Btw mit den Demo-Daten, die du in deiner Frage angegeben hast, bekomme ich keinen Fehler. –