Guten Morgen
Ich habe ein DataSet mit nicht ganz trivialer Struktur, zum Eintragen von Tageseinnahmen für verschiedene (zur Programmierzeit unbekannt vielen) Warengruppen.
Dazu habe ich eine kleine Form, auf der Jahre und / oder Monate ausgewählt werden können, um die Daten (dann eben für das ganze Jahr, oder einen Monat) anzuzeigen und mit einem Monat - oder Jahr zu vergleichen.
Nun habe ich die Tageseinnahmen von 3 Jahren eingetragen, also ca. 800 Stück und die Ausführung der Anzeige der Daten für ein Jahr, dauert ca. 30 Sekunden.
6 Jahre habe ich noch vor mir, bis ich auf Stand Heute bin und es kommen ja noch Einnahmen dazu, das macht mir Angst...
Ich habe jetzt die Hoffnung, dass mein Code einfach schlecht ist und dieser verbessert werden kann, um die Performance zu steigern.
Da ich diesen Code jedoch sinnvoll finde, fällt mir keine Verbesserung dazu ein. Der Code ist großzügig kommentiert und die Variablennamen sollten selbstsprechend sein (cih hoffe es zumindest)
Hier der Code für die Anzeige der Jahresumsätze
Spoiler anzeigen
und dann hier noch der Code für die Monate. Das ganze läuft in einer annehmbaren Zeit durch, allerdings ist ja hier auch die Datenmenge kleiner.
Da ich diesen Code aber nach dem gleichen Schema wie die Jahresumsätze erstellt habe, ist er (hoffentlich) auch verbesserungswürdig:
Spoiler anzeigen
Ich habe ein DataSet mit nicht ganz trivialer Struktur, zum Eintragen von Tageseinnahmen für verschiedene (zur Programmierzeit unbekannt vielen) Warengruppen.
Dazu habe ich eine kleine Form, auf der Jahre und / oder Monate ausgewählt werden können, um die Daten (dann eben für das ganze Jahr, oder einen Monat) anzuzeigen und mit einem Monat - oder Jahr zu vergleichen.
Nun habe ich die Tageseinnahmen von 3 Jahren eingetragen, also ca. 800 Stück und die Ausführung der Anzeige der Daten für ein Jahr, dauert ca. 30 Sekunden.
6 Jahre habe ich noch vor mir, bis ich auf Stand Heute bin und es kommen ja noch Einnahmen dazu, das macht mir Angst...
Ich habe jetzt die Hoffnung, dass mein Code einfach schlecht ist und dieser verbessert werden kann, um die Performance zu steigern.
Da ich diesen Code jedoch sinnvoll finde, fällt mir keine Verbesserung dazu ein. Der Code ist großzügig kommentiert und die Variablennamen sollten selbstsprechend sein (cih hoffe es zumindest)
Hier der Code für die Anzeige der Jahresumsätze
VB.NET-Quellcode
- Private Sub BTNYear_Click(sender As Object, e As EventArgs) Handles BTNYear.Click
- FillYear
- End Sub
- 'Funktion zur Jahresauswertung
- Private Sub FillYear()
- 'Prüfen ob Eingaben in ComboBoxen numerisch sind
- Dim year As Integer
- Dim yearcomp As Integer
- 'Prüfen ob cbyear numerisch ist
- If Not Integer.TryParse(CBYear.Text, year) Then
- Exit Sub
- End If
- 'Prüfen ob cbcompyear numerisch ist
- If Not Integer.TryParse(CBCompare.Text, yearcomp) Then
- Exit Sub
- End If
- 'DGV löschen
- DelDGV()
- 'Spalten anlegen
- 'erste Spalte für Datumswerte anlegen
- DGVEvaluation.Columns.Add("clmDate", "Datum")
- Dim groupcount As Integer = DtsSettings.ProductGroup.Count
- Dim Groupname As String
- 'entsprechend Spalten anlegen
- For i = 0 To groupcount - 1
- 'Name aus BindingSource lesen
- Dim ProductGroup = DirectCast(DirectCast(ProductGroupBindingSource(i), DataRowView).Row, DtsSettings.ProductGroupRow)
- Groupname = ProductGroup.Name
- 'Spalte für jede Warengruppe anlegen
- DGVEvaluation.Columns.Add("clm" & Groupname, Groupname)
- Next
- 'Spalten für Tageseinnahme und Kunden anlegen
- With DGVEvaluation
- .Columns.Add("clmTotalIncome", "gesamt")
- .Columns.Add("clmCustomers", "Kunden")
- End With
- 'Zeilen für Monate anlegen
- Dim DGVColumnCount As Integer = DGVEvaluation.ColumnCount
- DGVEvaluation.Rows.Add("Januar")
- DGVEvaluation.Rows.Add("Februar")
- DGVEvaluation.Rows.Add("März")
- DGVEvaluation.Rows.Add("April")
- DGVEvaluation.Rows.Add("Mai")
- DGVEvaluation.Rows.Add("Juni")
- DGVEvaluation.Rows.Add("Juli")
- DGVEvaluation.Rows.Add("August")
- DGVEvaluation.Rows.Add("September")
- DGVEvaluation.Rows.Add("Oktober")
- DGVEvaluation.Rows.Add("November")
- DGVEvaluation.Rows.Add("Dezember")
- DGVEvaluation.Rows.Add("")
- DGVEvaluation.Rows.Add("gesamt")
- DGVEvaluation.Rows.Add("%")
- Dim ArrIncomeMonth(0 To 12, 0 To groupcount) As Double
- Dim ArrCustomers(0 To 11) As Integer
- Dim ArrIncomeYear(0 To groupcount) As Double
- Dim CustomersTotal As Integer
- Dim DateSelected As Date
- Dim numberofdays As Integer
- Dim tempdate As Date
- '1. Schleife für jeden Monat - für das aktuelle Jahr
- For i = 1 To 12
- DateSelected = Date.Parse("01." & i & "." & year)
- numberofdays = Integer.Parse(DateTime.DaysInMonth(year, i).ToString)
- 'Schleife für jeden Tag des Monats
- For j = 0 To numberofdays - 1
- 'ausgewähltes Jahr
- tempdate = DateSelected.AddDays(j)
- 'Datum in den Einnahmen suchen
- Dim IncomeRow = DtsSettings.DailyIncome.FirstOrDefault(Function(x) x._Date.Date = tempdate)
- If IncomeRow Is Nothing Then Continue For 'Wenn nicht gefunden, nächster Durchgang
- 'Kunden speichern
- ArrCustomers(i - 1) += IncomeRow.CustomerCount
- For k = 0 To groupcount - 1 'Schleife durch Product Group DataTable
- 'Name aus BindingSource lesen
- Dim ProductGroup = DirectCast(DirectCast(ProductGroupBindingSource(k), DataRowView).Row, DtsSettings.ProductGroupRow)
- Groupname = ProductGroup.Name
- 'Warengruppenumsatz für Datum ermitteln und in Array addieren
- Dim ProductGroupRow = DtsSettings.Distribution_Table.SingleOrDefault(Function(x) x.DailyIncomeRow._Date.Date = tempdate AndAlso x.ProductGroupRow.Name = Groupname)
- If ProductGroupRow Is Nothing Then Continue For
- ArrIncomeMonth(i - 1, k) += CDbl(ProductGroupRow.ProductGroupIncome / 100)
- Next
- 'Gesamtumsatz ins Array schreiben
- ArrIncomeMonth(i - 1, groupcount) += CDbl(IncomeRow.DailyIncome / 100)
- Next
- 'Umsätze addieren und Daten ins DGV schreiben
- For L = 0 To groupcount
- ArrIncomeYear(L) += ArrIncomeMonth(i - 1, L)
- DGVEvaluation.Rows(i - 1).Cells(L + 1).Value = ArrIncomeMonth(i - 1, L).ToString("#,##0.00")
- Next
- 'Kunden ins DGV schreiben
- DGVEvaluation.Rows(i - 1).Cells(DGVColumnCount - 1).Value = ArrCustomers(i - 1).ToString
- Next
- 'Gesamtumsatz ins DGV schreiben
- For i = 0 To groupcount
- DGVEvaluation.Rows(13).Cells(i + 1).Value = ArrIncomeYear(i).ToString("#,##0.00")
- Next
- 'Gesamtkunden eintragen
- For i = 0 To 11
- CustomersTotal += ArrCustomers(i)
- Next
- DGVEvaluation.Rows(13).Cells(DGVColumnCount - 1).Value = CustomersTotal.ToString
- '2. Schleife für jeden Monat - für das vergleichsjahr
- Dim DateComp As Date
- Dim numberofdayscomp As Integer
- Dim ArrIncomeMonthComp(0 To 12, 0 To groupcount) As Double
- Dim ArrCustomersComp(0 To 11) As Integer
- Dim arrIncomeYearComp(0 To groupcount) As Double
- For i = 1 To 12
- DateComp = Date.Parse("01." & i & "." & yearcomp)
- numberofdayscomp = Integer.Parse(DateTime.DaysInMonth(yearcomp, i).ToString)
- 'Schleife für jeden Tag des Monats
- For j = 0 To numberofdayscomp - 1
- 'ausgewähltes Jahr
- tempdate = DateComp.AddDays(j)
- 'Datum in den Einnahmen suchen
- Dim IncomeRow = DtsSettings.DailyIncome.FirstOrDefault(Function(x) x._Date.Date = tempdate)
- If IncomeRow Is Nothing Then Continue For 'Wenn nicht gefunden, nächster Durchgang
- 'Kunden speichern
- ArrCustomersComp(i - 1) += IncomeRow.CustomerCount
- For k = 0 To groupcount - 1 'Schleife durch Product Group DataTable
- 'Name aus BindingSource lesen
- Dim ProductGroup = DirectCast(DirectCast(ProductGroupBindingSource(k), DataRowView).Row, DtsSettings.ProductGroupRow)
- Groupname = ProductGroup.Name
- 'Warengruppenumsatz für Datum ermitteln und in Array addieren
- Dim ProductGroupRow = DtsSettings.Distribution_Table.SingleOrDefault(Function(x) x.DailyIncomeRow._Date.Date = tempdate AndAlso x.ProductGroupRow.Name = Groupname)
- If ProductGroupRow Is Nothing Then Continue For
- ArrIncomeMonthComp(i - 1, k) += CDbl(ProductGroupRow.ProductGroupIncome / 100)
- Next
- 'Gesamtumsatz ins Array schreiben
- ArrIncomeMonthComp(i - 1, groupcount) += CDbl(IncomeRow.DailyIncome / 100)
- Next
- 'Umsätze addieren und Daten ins DGV schreiben
- For L = 0 To groupcount
- arrIncomeYearComp(L) += ArrIncomeMonthComp(i - 1, L)
- Next
- Next
- 'Leerzeile und Zeile fürs Vergleichsjahr anlegen
- DGVEvaluation.Rows.Add("")
- DGVEvaluation.Rows.Add(DateComp.ToString("yyyy"))
- 'Umsätze aus Vergleichsjahr ins DGV schreiben
- For L = 0 To groupcount
- DGVEvaluation.Rows(16).Cells(L + 1).Value = arrIncomeYearComp(L).ToString("#,##0.00")
- Next
- 'Kunden ins DGV schreiben
- Dim CustomersTotalComp As Integer
- For i = 0 To 11
- CustomersTotalComp += ArrCustomersComp(i)
- Next
- DGVEvaluation.Rows(16).Cells(DGVColumnCount - 1).Value = CustomersTotalComp.ToString
- '% ausrechnen - Kunden
- DGVEvaluation.Rows(14).Cells(DGVColumnCount - 1).Value = Math.Round(((CustomersTotal - CustomersTotalComp) / CustomersTotalComp) * 100, 2).ToString("0.00") & " %"
- '& ausrechnene - Warengruppen
- For i = 0 To groupcount
- DGVEvaluation.Rows(14).Cells(i + 1).Value = Math.Round(((ArrIncomeYear(i) - arrIncomeYearComp(i)) / arrIncomeYearComp(i)) * 100, 2).ToString("0.00") & " %"
- Next
- 'Gesamtkunden vergleichen und ggf. blau färben
- If CustomersTotal > CustomersTotalComp Then
- For i = 13 To 14
- With DGVEvaluation
- .Rows(i).Cells(DGVColumnCount - 1).Style.ForeColor = Color.Blue
- .Rows(i).Cells(DGVColumnCount - 1).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- Next
- End If
- 'Gesamumsätze vergleichen und ggf blau färben
- For i = 0 To groupcount
- If ArrIncomeYear(i) > arrIncomeYearComp(i) Then
- For j = 13 To 14
- With DGVEvaluation
- .Rows(j).Cells(i + 1).Style.ForeColor = Color.Blue
- .Rows(j).Cells(i + 1).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- Next
- End If
- Next
- 'Monatsumsätze vergleichen und ggf. blau färben
- For i = 0 To 11
- For j = 0 To groupcount
- If ArrIncomeMonth(i, j) > ArrIncomeMonthComp(i, j) Then
- With DGVEvaluation
- .Rows(i).Cells(j + 1).Style.ForeColor = Color.Blue
- .Rows(i).Cells(j + 1).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- End If
- Next
- Next
- 'Monatskunden vergleichen und ggf. blau färben
- For i = 0 To 11
- If ArrCustomers(i) > ArrCustomersComp(i) Then
- With DGVEvaluation
- .Rows(i).Cells(DGVColumnCount - 1).Style.ForeColor = Color.Blue
- .Rows(i).Cells(DGVColumnCount - 1).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- End If
- Next
- 'DGV Spalten formatieren
- FormatDGV(DGVColumnCount)
- 'Größe von DGV und Form anpassen
- ChangeSizes(DGVColumnCount)
- End Sub
- 'Sub zum löschen des DGV
- Private Sub DelDGV()
- With DGVEvaluation
- .Rows.Clear()
- For i As Integer = .ColumnCount - 1 To 0 Step -1
- .Columns.RemoveAt(i)
- Next i
- End With
- End Sub
VB.NET-Quellcode
- Private Sub FormatDGV(DGVColumnCount As Integer)
- DGVEvaluation.DefaultCellStyle.Font = New Font("Microsoft Sans Serif", 12)
- For L = 1 To DGVColumnCount - 1
- With DGVEvaluation.Columns(L)
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
- .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
- .SortMode = DataGridViewColumnSortMode.NotSortable
- End With
- Next
- With DGVEvaluation.Columns(DGVColumnCount - 2)
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
- .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
- .SortMode = DataGridViewColumnSortMode.NotSortable
- End With
- With DGVEvaluation.Columns(0)
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
- .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
- .SortMode = DataGridViewColumnSortMode.NotSortable
- End With
- With DGVEvaluation.Columns(DGVColumnCount - 3)
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
- .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
- .SortMode = DataGridViewColumnSortMode.NotSortable
- End With
- 'DGV Header formatieren
- With DGVEvaluation.ColumnHeadersDefaultCellStyle
- .Alignment = DataGridViewContentAlignment.MiddleCenter
- .Font = New Font("Microsoft Sans Serif", 12)
- End With
- End Sub
- Private Sub ChangeSizes(DGVColumnCount As Integer)
- 'Größe des DGV anpassen
- DGVEvaluation.Width = DGVEvaluation.Columns.Cast(Of DataGridViewColumn).Sum(Function(x) x.Width) + 2
- DGVEvaluation.Height = DGVEvaluation.Rows.Cast(Of DataGridViewRow).Sum(Function(x) x.Height) + DGVEvaluation.ColumnHeadersHeight
- DGVEvaluation.Columns(DGVColumnCount - 1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
- 'Größe der Form anpassen
- Dim border As Integer = Integer.Parse(((Me.Size.Width - Me.ClientSize.Width) / 2).ToString)
- Dim header As Integer = Me.Size.Height - Me.ClientSize.Height - border
- Dim NewFormWidth = DGVEvaluation.Width + border * 2 + 30
- If NewFormWidth > 738 Then Me.Width = NewFormWidth
- Me.Height = DGVEvaluation.Height + border + header + 80
- End Sub
und dann hier noch der Code für die Monate. Das ganze läuft in einer annehmbaren Zeit durch, allerdings ist ja hier auch die Datenmenge kleiner.
Da ich diesen Code aber nach dem gleichen Schema wie die Jahresumsätze erstellt habe, ist er (hoffentlich) auch verbesserungswürdig:
VB.NET-Quellcode
- 'Funktion für Monatsauswertung
- Private Sub FillMonth()
- 'DGV löschen
- DelDGV()
- 'erste Spalte für Datumswerte anlegen
- DGVEvaluation.Columns.Add("clmDate", "Datum")
- 'Anzahl der Warengruppen ermitteln
- Dim GroupCount As Integer
- GroupCount = DtsSettings.ProductGroup.Count
- Dim Groupname As String
- 'Schleife durch jede Warengruppe
- For i = 0 To GroupCount - 1
- 'Name aus BindingSource lesen
- Dim ProductGroup = DirectCast(DirectCast(ProductGroupBindingSource(i), DataRowView).Row, DtsSettings.ProductGroupRow)
- Groupname = ProductGroup.Name
- 'Spalte für jede Warengruppe anlegen
- DGVEvaluation.Columns.Add("clm" & Groupname, Groupname)
- Next
- 'Spalten für Tageseinnahme und Kunden anlegen
- With DGVEvaluation
- .Columns.Add("clmTotalIncome", "gesamt")
- .Columns.Add("clmCustomers", "Kunden")
- .Columns.Add("clmHeader", "")
- .Columns.Add("cmlpcs", "pro Kopf")
- End With
- 'DGV Spalten formatieren
- Dim DGVColumnCount As Integer = DGVEvaluation.ColumnCount
- FormatDGV(DGVColumnCount)
- 'Start und Enddatum aus Comboboxen ermitteln
- Dim StartDate As Date
- Dim Numberofdays As Integer
- Dim StartDateComp As Date
- Dim NumberofdaysComp As Integer
- If Not GetDates(StartDate, Numberofdays, StartDateComp, NumberofdaysComp) Then
- MessageBox.Show("ungültige Datumsauswahl")
- Exit Sub
- End If
- 'Schleife durch jeden Tag des Monats
- Dim TempDate As Date
- Dim indexcounter As Integer = -1
- Dim ArrGroupIncome(0 To GroupCount - 1) As Double
- Dim Totalincome As Double
- Dim Dailyincome As Double
- Dim TotalCustomers As Integer
- Dim DailyCustomers As Integer
- Dim AmountOfIncomeDays As Integer = 0
- For i = 0 To Numberofdays - 1
- 'Datum um einen Tag erhöhen
- TempDate = StartDate.AddDays(i)
- 'Datum in den Einnahmen suchen
- Dim IncomeRow = DtsSettings.DailyIncome.FirstOrDefault(Function(x) x._Date.Date = TempDate)
- If IncomeRow Is Nothing Then Continue For 'Wenn nicht gefunden, nächster Durchgang
- 'Wenn gefunden: Datum in Listview schreiben
- DGVEvaluation.Rows.Add(IncomeRow._Date.ToString("ddd dd.MM"))
- AmountOfIncomeDays += 1
- indexcounter += 1
- 'und Warengruppeneinnahmen aus DTS pulen
- For j = 0 To GroupCount - 1 'Schleife durch Product Group DataTable
- 'Name aus BindingSource lesen
- Dim ProductGroup = DirectCast(DirectCast(ProductGroupBindingSource(j), DataRowView).Row, DtsSettings.ProductGroupRow)
- Groupname = ProductGroup.Name
- 'Warengruppenumsatz für Datum ermitteln und in Listview eintragen
- Dim ProductGroupRow = DtsSettings.Distribution_Table.SingleOrDefault(Function(x) x.DailyIncomeRow._Date.Date = TempDate AndAlso x.ProductGroupRow.Name = Groupname)
- If ProductGroupRow Is Nothing Then Continue For
- Dim Income As Double
- Income = CDbl(ProductGroupRow.ProductGroupIncome / 100)
- DGVEvaluation.Rows(indexcounter).Cells(j + 1).Value = Income.ToString("#,##0.00")
- 'Umsatz in Array addieren
- ArrGroupIncome(j) += Income
- Next
- 'Tagesumsatz (gesamt) und Kunden eintragen und Gesamtzahlen errechnen
- Dailyincome = CDbl(IncomeRow.DailyIncome / 100)
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 4).Value = Dailyincome.ToString("#,##0.00")
- Totalincome += Dailyincome
- DailyCustomers = IncomeRow.CustomerCount
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 3).Value = DailyCustomers.ToString
- TotalCustomers += DailyCustomers
- Next
- 'Leerzeile anlegen
- DGVEvaluation.Rows.Add()
- 'Zeile für Gesamtumsätze anlegen
- DGVEvaluation.Rows.Add("gesamt")
- indexcounter += 2
- 'Gesamtumsätze für jede Warengruppe eintragen
- For k = 0 To GroupCount - 1
- DGVEvaluation.Rows(indexcounter).Cells(k + 1).Value = ArrGroupIncome(k).ToString("#,##0.00")
- Next
- 'Gesamtumsatz Tage eintragen
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 4).Value = Totalincome.ToString("#,##0.00")
- 'Gesamtkunden eintragen
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 3).Value = TotalCustomers.ToString
- 'Pro Kopf Umsatz
- Dim PCS = 0.00
- If TotalCustomers > 0 Then PCS = Totalincome / TotalCustomers
- DGVEvaluation.Rows(0).Cells(DGVColumnCount - 2).Value = "pro Kopf"
- DGVEvaluation.Rows(0).Cells(DGVColumnCount - 1).Value = PCS.ToString("0.00")
- 'Kundenschnitt
- Dim CustAvg = TotalCustomers / AmountOfIncomeDays
- DGVEvaluation.Rows(1).Cells(DGVColumnCount - 2).Value = "Kundenschnitt"
- DGVEvaluation.Rows(1).Cells(DGVColumnCount - 1).Value = CustAvg.ToString("0.00")
- 'Umsätze aus Vergleichsjahr suchen
- Dim ArrGroupIncomeComp(0 To GroupCount - 1) As Double
- Dim TotalIncomeComp As Double
- Dim TotalCustomersComp As Integer
- Dim AmountOfCompDays As Integer = 0
- For i = 0 To NumberofdaysComp - 1
- 'Datum um einen Tag erhöhen
- TempDate = StartDateComp.AddDays(i)
- 'Datum in den Einnahmen suchen
- Dim IncomeRow = DtsSettings.DailyIncome.FirstOrDefault(Function(x) x._Date.Date = TempDate)
- If IncomeRow Is Nothing Then Continue For 'Wenn nicht gefunden, nächster Durchgang
- AmountOfCompDays += 1
- 'Warengruppeneinnahmen aus DTS pulen
- For j = 0 To GroupCount - 1 'Schleife durch Product Group DataTable
- 'Name aus BindingSource lesen
- Dim ProductGroup = DirectCast(DirectCast(ProductGroupBindingSource(j), DataRowView).Row, DtsSettings.ProductGroupRow)
- Groupname = ProductGroup.Name
- 'Warengruppenumsatz für Datum ermitteln
- Dim ProductGroupRow = DtsSettings.Distribution_Table.SingleOrDefault(Function(x) x.DailyIncomeRow._Date.Date = TempDate AndAlso x.ProductGroupRow.Name = Groupname)
- If ProductGroupRow Is Nothing Then Continue For
- Dim Income As Double
- Income = CDbl(ProductGroupRow.ProductGroupIncome / 100)
- 'Umsatz in Array addieren
- ArrGroupIncomeComp(j) += Income
- Next
- 'Tagesumsatz (gesamt) und Kunden eintragen und Gesamtzahlen errechnen
- Dailyincome = CDbl(IncomeRow.DailyIncome / 100)
- TotalIncomeComp += Dailyincome
- DailyCustomers = IncomeRow.CustomerCount
- TotalCustomersComp += DailyCustomers
- Next
- 'Zeile für Vergleichen anlegen
- indexcounter += 1
- DGVEvaluation.Rows.Add("%")
- '% für jede Warengruppe eintragen
- For i = 0 To GroupCount - 1
- DGVEvaluation.Rows(indexcounter).Cells(i + 1).Value = Math.Round(((ArrGroupIncome(i) - ArrGroupIncomeComp(i)) / ArrGroupIncomeComp(i)) * 100, 2).ToString("0.00") & " %"
- Next
- '% für Tagesumsatz eintragen
- Dim DailyIncomeCompare As Double = Math.Round(((Totalincome - TotalIncomeComp) / TotalIncomeComp) * 100, 2)
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 4).Value = DailyIncomeCompare.ToString("0.00") & " %"
- '% für Kunden eintragen
- Dim Customercompare As Double = Math.Round(((TotalCustomers - TotalCustomersComp) / TotalCustomersComp) * 100, 2)
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 3).Value = Customercompare.ToString("0.00") & " %"
- 'Umsätze und % blau färben, wenn > 100
- If Customercompare > 0 Then
- With DGVEvaluation
- .Rows(indexcounter).Cells(DGVColumnCount - 3).Style.ForeColor = Color.Blue
- .Rows(indexcounter).Cells(DGVColumnCount - 3).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- .Rows(indexcounter - 1).Cells(DGVColumnCount - 3).Style.ForeColor = Color.Blue
- .Rows(indexcounter - 1).Cells(DGVColumnCount - 3).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- End If
- If DailyIncomeCompare > 0 Then
- With DGVEvaluation
- .Rows(indexcounter).Cells(DGVColumnCount - 4).Style.ForeColor = Color.Blue
- .Rows(indexcounter).Cells(DGVColumnCount - 4).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- .Rows(indexcounter - 1).Cells(DGVColumnCount - 4).Style.ForeColor = Color.Blue
- .Rows(indexcounter - 1).Cells(DGVColumnCount - 4).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- End If
- For i = 0 To ArrGroupIncome.Count - 1
- If ArrGroupIncome(i) > ArrGroupIncomeComp(i) Then
- With DGVEvaluation
- .Rows(indexcounter).Cells(i + 1).Style.ForeColor = Color.Blue
- .Rows(indexcounter).Cells(i + 1).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- .Rows(indexcounter - 1).Cells(i + 1).Style.ForeColor = Color.Blue
- .Rows(indexcounter - 1).Cells(i + 1).Style.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
- End With
- End If
- Next
- 'Leerzeile anlegen
- DGVEvaluation.Rows.Add()
- indexcounter += 2
- 'Zeile für Umsätze aus Vergleichsjahr anlegen
- DGVEvaluation.Rows.Add(StartDateComp.ToString("yyyy"))
- 'Gesamtumsätze für jede Warengruppe eintragen
- For i = 0 To GroupCount - 1
- DGVEvaluation.Rows(indexcounter).Cells(i + 1).Value = ArrGroupIncomeComp(i).ToString("#,##0.00")
- Next
- 'Gesamtumsatz Tage eintragen
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 4).Value = TotalIncomeComp.ToString("#,##0.00")
- 'Gesamtkunden eintragen
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 3).Value = TotalCustomersComp.ToString
- 'Pro Kopf Umsatz
- Dim PCSComp = 0.00
- If TotalCustomersComp > 0 Then PCSComp = TotalIncomeComp / TotalCustomersComp
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 2).Value = "pro Kopf"
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 1).Value = PCSComp.ToString("0.00")
- 'Kundenschnitt
- DGVEvaluation.Rows.Add()
- indexcounter += 1
- Dim CustAvgComp As Double = 0
- If AmountOfCompDays > 0 Then CustAvgComp = TotalCustomersComp / AmountOfCompDays
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 2).Value = "Kundenschnitt"
- DGVEvaluation.Rows(indexcounter).Cells(DGVColumnCount - 1).Value = CustAvgComp.ToString("0.00")
- 'Größe von DGV und Form anpassen
- ChangeSizes(DGVColumnCount)
- End Sub
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DerSmurf“ ()