Hallo liebes Forum
Leider bin ich auf ein Problem gestossen, an dem ich mir langsam aber sicher die Zähne ausbeisse.
Ich habe ein Programm geschrieben, das den Verlauf von Google Chrome, Mozilla Firefox und Opera mittels SQLite ausliest und in jeweils einem DataGridView anzeigt.
Nun möchte ich alle drei DGV bzw. dessen Daten in das erste dieser drei DGV kombinieren. Dazu habe ich folgenden Ansatz, der auch soweit super funktioniert:
Spoiler anzeigen
Das eigentliche Problem liegt aber beim Sortieren des DGV im Code nach einem Integer, in meinem Fall nach der Anzahl Aufrufe einer Webseite.
Diese werden z.B. anstatt 1,4,11,23,115 folgendermaßen sortiert: 1,11,115,23,4
Hierzu wollte ich eine neue Spalte vom Typ Integer hinzufügen und die Werte übernehmen um anschließend nach dieser Spalte zu sortieren.
Spoiler anzeigen
Dabei tritt aber folgende Fehlermeldung auf:
Das Thema wurde schon in diesem Thread behandelt, jedoch führte bei mir weder die darin beschriebene Lösung noch mehrfaches googeln zum Erfolg.
Ich bin noch ziemlich neu in VB also bitte entschuldigt wenn mein Code weder elegant noch performant ist
Für jede Hilfe wäre ich sehr dankbar
LG Patrick
Leider bin ich auf ein Problem gestossen, an dem ich mir langsam aber sicher die Zähne ausbeisse.
Ich habe ein Programm geschrieben, das den Verlauf von Google Chrome, Mozilla Firefox und Opera mittels SQLite ausliest und in jeweils einem DataGridView anzeigt.
Nun möchte ich alle drei DGV bzw. dessen Daten in das erste dieser drei DGV kombinieren. Dazu habe ich folgenden Ansatz, der auch soweit super funktioniert:
VB.NET-Quellcode
- Function CombineDataGridViews() As Boolean
- Dim dataset1 As DataSet = gridViewToData(DataGridView1)'Chrome
- Dim dataset2 As DataSet = gridViewToData(DataGridView2)'Firefox
- Dim dataset3 As DataSet = gridViewToData(DataGridView3)'Opera
- Dim finaldata As New DataSet
- Try
- dataset1.Merge(dataset2, True, MissingSchemaAction.Add) '2 in 1
- dataset1.AcceptChanges()
- dataset3.Merge(dataset1, True, MissingSchemaAction.Add) '1 in 3
- dataset3.AcceptChanges()
- DataGridView4.DataSource = dataset3.Tables(0) 'für Bearbeitung in 4tem DGV anzeigen
- Dim mtCell As Integer = 0
- Dim row As DataGridViewRow = New DataGridViewRow()
- For rowNo As Integer = DataGridView4.Rows.Count - 2 To 0 Step -1 'Leere Zeilen entfernen
- row = DataGridView4.Rows(rowNo)
- Try
- For j = 0 To row.Cells.Count - 2
- If row.Cells(j).Value Is Nothing OrElse row.Cells(j).Value Is DBNull.Value Then
- mtCell += 1
- End If
- Next
- If mtCell = row.Cells.Count - 1 Then
- DataGridView4.Rows.RemoveAt(rowNo)
- End If
- mtCell = 0
- Catch ex As Exception
- Exit For
- End Try
- Next rowNo
- finaldata = gridViewToData(DataGridView4)
- DataGridView1.DataSource = finaldata.Tables(0) 'Bearbeitete Daten wieder in DGV1 übertragen
- Return True
- Catch ex As Exception
- MsgBox("Fehler")
- Return False
- End Try
- Return True
- End Function
- Private Function gridViewToData(ByVal dgv As DataGridView) As DataSet
- Dim ds As New DataSet
- Try
- ' Add Table
- ds.Tables.Add("Invoices")
- ' Add Columns
- Dim col As DataColumn
- For Each dgvCol As DataGridViewColumn In dgv.Columns
- col = New DataColumn(dgvCol.Name)
- ds.Tables("Invoices").Columns.Add(col)
- Next
- 'Add Rows from the datagridview
- Dim row As DataRow
- Dim colcount As Integer = dgv.Columns.Count - 1
- For i As Integer = 0 To dgv.Rows.Count - 1
- row = ds.Tables("Invoices").Rows.Add
- For Each column As DataGridViewColumn In dgv.Columns
- row.Item(column.Index) = dgv.Rows.Item(i).Cells(column.Index).Value
- Next
- Next
- Return ds
- Catch ex As Exception
- MsgBox("Error")
- Return Nothing
- End Try
- End Function
Das eigentliche Problem liegt aber beim Sortieren des DGV im Code nach einem Integer, in meinem Fall nach der Anzahl Aufrufe einer Webseite.
Diese werden z.B. anstatt 1,4,11,23,115 folgendermaßen sortiert: 1,11,115,23,4
Hierzu wollte ich eine neue Spalte vom Typ Integer hinzufügen und die Werte übernehmen um anschließend nach dieser Spalte zu sortieren.
VB.NET-Quellcode
- ' Neue Spalte an letzter Position
- Me.DataGridView1.Columns.Add("sort_col", "sort_col")
- Me.DataGridView1.Columns("sort_col").ValueType = GetType(Integer)
- Me.DataGridView1.Columns("sort_col").DisplayIndex = Me.DataGridView1.ColumnCount - 1
- Me.DataGridView1.Columns("sort_col").Visible = True
- ' Werte übernehmen
- For Each line As DataGridViewRow In DataGridView1.Rows
- line.Cells(Me.DataGridView1.ColumnCount - 1).Value = line.Cells(3).Value
- Next
- 'sortieren
- DataGridView1.Sort(DataGridView1.Columns("sort_col"), ComponentModel.ListSortDirection.Descending)
Dabei tritt aber folgende Fehlermeldung auf:
Das datengebundene DataGridView-Steuerelement kann nur nach datengebundenen Spalten sortiert werden.
Das Thema wurde schon in diesem Thread behandelt, jedoch führte bei mir weder die darin beschriebene Lösung noch mehrfaches googeln zum Erfolg.
Ich bin noch ziemlich neu in VB also bitte entschuldigt wenn mein Code weder elegant noch performant ist
Für jede Hilfe wäre ich sehr dankbar
LG Patrick
Umfangreicher Converter im Browser: CloudConvert
Temporäre e-Mail: temp-mail
Text-Übersetzter: DeepL
Kostenloser Webspace: bplaced
Temporäre e-Mail: temp-mail
Text-Übersetzter: DeepL
Kostenloser Webspace: bplaced