Hallo Leute,
ich habe ein kleines Proggi geschrieben zur Erfassung von Aufmaßen von der Baustelle. Nun stehe ich vor folgendem Problem:
Ein Aufmaß besteht aus mehreren Aufmaßblättern, in welchem mehrere Positionsnummern entahlten sind. Bei der Datenerfassung kann im Moment der Einfachheit halber jede Positionsnummer mit den jeweiligen Mengenangaben unbegrenzt oft in dem DGV erfasst werden. Da ich die Datenbank aber nicht unnötig vollmüllen will, möchte ich nun die Mehrfacheinträge zusammenfassen.
Kleines Beispiel dazu:
Der User gibt folgendes ein:
1) Positionsnummer 01.01.0010, Menge 23,7, Einheit m, Aufmaßblatt 1
2) Positionsnummer 01.01.0010, Menge 23,7, Einheit m, Aufmaßblatt 1
usw.
Am Ende soll dann daraus folgendes werden:
1) Positionsnummer 01.01.0010, Menge 47,4, Einheit m, Aufmaßblatt 1
Ich hoffe der Sinn ist einigermaßen rüber gekommen.
Nun habe ich dazu folgenden Code mir ausgetüftelt, der allerdings nur bedingt funktioniert und das auch nicht wirklich perfomant.
Vielleicht hat jemand von euch ne Idee dazu.
ich habe ein kleines Proggi geschrieben zur Erfassung von Aufmaßen von der Baustelle. Nun stehe ich vor folgendem Problem:
Ein Aufmaß besteht aus mehreren Aufmaßblättern, in welchem mehrere Positionsnummern entahlten sind. Bei der Datenerfassung kann im Moment der Einfachheit halber jede Positionsnummer mit den jeweiligen Mengenangaben unbegrenzt oft in dem DGV erfasst werden. Da ich die Datenbank aber nicht unnötig vollmüllen will, möchte ich nun die Mehrfacheinträge zusammenfassen.
Kleines Beispiel dazu:
Der User gibt folgendes ein:
1) Positionsnummer 01.01.0010, Menge 23,7, Einheit m, Aufmaßblatt 1
2) Positionsnummer 01.01.0010, Menge 23,7, Einheit m, Aufmaßblatt 1
usw.
Am Ende soll dann daraus folgendes werden:
1) Positionsnummer 01.01.0010, Menge 47,4, Einheit m, Aufmaßblatt 1
Ich hoffe der Sinn ist einigermaßen rüber gekommen.
Nun habe ich dazu folgenden Code mir ausgetüftelt, der allerdings nur bedingt funktioniert und das auch nicht wirklich perfomant.
Vielleicht hat jemand von euch ne Idee dazu.
VB.NET-Quellcode
-
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Me.Cursor = Cursors.WaitCursor
- Dim liste1 As New List(Of String)
- Dim liste2 As New List(Of String)
- Dim liste3 As New List(Of String)
- Dim liste4 As New List(Of String)
- For Each dr As DataGridViewRow In DataGridView1.Rows
- If Not DataGridView1.Item(0, dr.Index).Value Is Nothing Then
- liste1.Add(DataGridView1.Item(0, dr.Index).Value.ToString)
- If Not DataGridView1.Item(3, dr.Index).Value Is Nothing Then
- liste3.Add(DataGridView1.Item(3, dr.Index).Value.ToString)
- End If
- End If
- Next
- liste2 = liste1.Distinct.ToList
- liste4 = liste3.Distinct.ToList
- Dim dtv As DataView
- Dim dt As New DataTable
- Dim dtResult As New DataTable
- For Each colum As DataGridViewColumn In DataGridView1.Columns
- dt.Columns.Add(colum.HeaderText)
- dtResult.Columns.Add(colum.HeaderText)
- Next
- For Each dr As DataGridViewRow In DataGridView1.Rows
- dt.Rows.Add(dr.Cells.Item(0), dr.Cells.Item(1), dr.Cells.Item(2), dr.Cells.Item(3))
- Next
- dtv = New DataView(dt)
- For i = 0 To liste2.Count - 1 Step 1
- dtv.RowFilter = "[" & DataGridView1.Columns(0).HeaderText & "] = '" & liste2.Item(i).ToString & "'"
- Dim dta As New DataTable
- dta = dtv.ToTable
- Dim dtva As New DataView(dta)
- For j = 0 To liste4.Count - 1 Step 1
- dtva.RowFilter = "[" & DataGridView1.Columns(3).HeaderText & "] = '" & liste4.Item(j).ToString & "'"
- Dim dtb As New DataTable
- dtb = dtva.ToTable
- Dim Menge As Double = 0
- For Each dr As DataRow In dtb.Rows
- If dr.Item(2).ToString = "" OrElse dr.Item(2) Is Nothing Then
- Menge = Menge + 0
- Else
- Menge = Menge + Double.Parse(dr.Item(2).ToString)
- End If
- Next
- dtResult.Rows.Add(liste2.Item(i).ToString, Menge, "Einheit", liste4.Item(j).ToString)
- Next
- Next
- DataGridView1.Rows.Clear()
- For Each dr As DataRow In dtResult.Rows
- DataGridView1.Rows.Add(dr.Item(0).ToString, dr.Item(1).ToString, dr.Item(2).ToString, dr.Item(3).ToString)
- Next
- DataGridView1.Refresh()
- Me.Cursor = Cursors.Default
- End Sub