| |
VB.NET - FortgeschritteneDaten in DGV anzeigen | | | Autor: ERBRU | Datum: 11.11.17 20:09 |
| wie kann ich eine Datatable, so anzeigen lassen.
bzw. wie sieht da eine Abfrage für aus?
hoffe das mich da jemand in das Thema Grupiertes DGV einweisen kann.
Meine Tabelle hat die gleichen Felder wie im Bild zu sehen nur alle Nebeneinander. Es kann auch DBNull
vorkommen
Tausend Dank schon mal vorab, es wäre sehr wichtig für mich
| |
Re: Daten in DGV anzeigen | | | Autor: ERBRU | Datum: 11.11.17 21:06 |
| Puh Danke, da komm ich nicht mit klar ist schon so in etwa was ich mir vorstelle
gibt es da Beispiele die ich besser verstehen bzw. nachvollziehen könnte?
Danke | |
DatagridviewGrouper: Datensätze gruppiert anzeigen | | | Autor: Manfred X | Datum: 12.11.17 11:45 |
| Kleiner Test des oben verlinkten "DataGridViewGrouper" (C#-DLL):
Die Breite des Clientrectangle des Datagridview sollte
größer sein als die für die Anzeige erforderliche Breite der
Gruppen-Datenzeilen, weil es sonst rechts zu Display-Problemen
kommen kann. Der Horizontalscroller des Grid reagiert nicht
auf "Überbreite" der Gruppen-Zeilen.
Das DataError-Ereignis des Datagridview sollte mindestens
folgende Code-Zeilen enthalten, um Ausnahmen zu verhindern:
Private Sub dgv_DataError(sender As Object, _
e As System.Windows.Forms.DataGridViewDataErrorEventArgs) _
Handles dgv.DataError
If e.ColumnIndex < 0 Then
e.Cancel = True : Exit Sub
End If
End Sub Der programmierte Comparer erlaubt es nicht, Spalten, die DBNull-Werte
enthalten, zum Gruppieren zu verwenden (Ausnahme).
In der Code-Datei "support.cs" gibt es die Klasse "StrongCompare".
Der Code der Klassen-Methode "Compare" kann geeignet ergänzt werden:
public int Compare(object x, object y)
{
if (x == null || x == DBNull.Value)
{
if (y == null || y == DBNull.Value) return 0;
return 1;
}
if (y == null || y == DBNull.Value) return -1;
return ((F)x).CompareTo((T)y);
} Durch diesen Code werden Zeilen, die in der Gruppierungsspalte
einen fehlenden Wert enthalten, als Gruppe hinten angehängt
(falls Sortorder Ascending). | |
Re: Daten in DGV anzeigen | | | Autor: ERBRU | Datum: 12.11.17 12:26 |
| Danke ManfredX für deine Mühe,
doch komme ich damit nicht zurecht gibt es da "Projekt nicht in VB.NET" denn C#-DLL kann ich ja nicht in VB.NET verwenden.
Bitte hilf mir das umzusetzen
Danke
Danke | |
Re: Daten in DGV anzeigen | | | Autor: Manfred X | Datum: 12.11.17 12:42 |
| Wo ist das Problem?
Wenn Du C# auf dem Rechner installiert hast, kannst Du das
heruntergeladene Projekt auspacken und im Visual Studio
die Bibliothek erstellen.
Für die Verwendung der Bibliothek (Net-Verweis) spielt es
keine Rolle, in welcher Net-Sprache der Code erstellt worden ist.
Du kannst sie in VB referenzieren. | |
Re: Daten in DGV anzeigen | | | Autor: ERBRU | Datum: 12.11.17 12:51 |
| C# auf dem Rechner installiert hast, habe ich aber nicht installiert | |
Re: Daten in DGV anzeigen | | | Autor: Manfred X | Datum: 12.11.17 13:04 |
| C# ist Bestandteil von Visual Studio.
Ich habe keine Rechte an der Grouper-Bibliothek und kann sie
deshalb nicht veröffentlichen.
(Verwende das Kontaktformular und schicke mir Deine E-Mail-Adresse.) | |
Re: Daten in DGV anzeigen | | | Autor: ERBRU | Datum: 12.11.17 14:10 |
| Habe dir eine E-Mail gesendet.
habe auch den Grouper (Control) gesehen nur wo kommt der weg im Werkzeugkasten?
bzw. wie einbinden? bei mir wollte er ein Class haben. Ich probier weiter ...
Beitrag wurde zuletzt am 12.11.17 um 14:12:18 editiert. | |
DatagridviewGrouper: Anwendungsbeispiel | | | Autor: Manfred X | Datum: 12.11.17 15:23 |
| Public Class frmDatagridviewGrouper
Dim bs As New BindingSource
Dim WithEvents dgv As New DataGridView With _
{.Parent = Me, .Width = 600, .Height = 400, .Top = 40, _
.DataSource = bs, .AllowUserToAddRows = False}
Dim dt As New DataTable
Dim gc As New Subro.Controls.DataGridViewGrouperControl _
With {.Parent = Me}
Dim WithEvents grp As Subro.Controls.DataGridViewGrouper
Private Sub frmDatagridviewGrouper_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(620, 480)
'Test-Spalten in Datatable erstellen
With dt.Columns
.Add("Groups")
.Add("Whatever1") : .Add("Whatever2")
.Add("Numbers", GetType(Integer))
.Add("Doubles", GetType(Double))
.Add("Dates", GetType(DateTime))
End With
'Test-Daten in Datatable erzeugen
Dim rndm As New Random
For i As Integer = 0 To 100
Dim r As DataRow = dt.NewRow
r("Groups") = "Group_" & rndm.Next(1, 6).ToString
r("Whatever1") = "WE1 _ " & rndm.Next(10, 20).ToString
If i Mod 3 = 0 Then
r("Whatever2") = DBNull.Value
Else
r("Whatever2") = "WE2 _ " & rndm.Next(100, 120).ToString
End If
If i Mod 5 = 0 Then
r("numbers") = DBNull.Value 'Integer.MinValue 'DBNull.Value
Else
r("numbers") = rndm.Next(-10, 11)
End If
If i Mod 4 = 0 Then
r("doubles") = DBNull.Value
ElseIf i Mod 7 = 0 Then
r("Doubles") = Double.NaN
Else
r("doubles") = Math.Round(rndm.NextDouble(), 1)
End If
r("Dates") = _
New DateTime(CLng((DateTime.MaxValue.Ticks * rndm.NextDouble)))
If i Mod 7 = 0 Then
r("Dates") = DBNull.Value
End If
dt.Rows.Add(r)
Next i
bs.DataSource = dt 'Datenbindung herstellen
'Gruppierung ermöglichen
grp = New Subro.Controls.DataGridViewGrouper(dgv)
gc.Grouper = grp 'Gruppierungs-Control zuordnen
With (grp)
.SetGroupOn("Groups") 'Gruppen-Spalte einrichten
'Beispiele/Erläuterungen von Codeproject (Robert Verpalen)
With .Options
'to start with all rows collapsed on a (re)load or
'when the group is changed you can set the option
' startcollapsed:
.StartCollapsed = True
'if you don't want the grouped column name
'to be repeated in the headers:
.ShowGroupName = True
'if you don't want the (rowcount) to be shown in the headers:
.ShowCount = False
.GroupSortOrder = SortOrder.Descending
End With
'to collapse all loaded rows:
'(the difference with setting the option above,
'is that after choosing a new grouping (or on a reload),
'the new groups would expand.
.CollapseAll()
End With
End Sub
Private Sub grp_DisplayGroup(sender As Object, _
e As Subro.Controls.GroupDisplayEventArgs) Handles grp.DisplayGroup
With e
If .Selected Then
.BackColor = Color.Blue
.ForeColor = Color.White
Else
.BackColor = _
If(.Group.GroupIndex Mod 2 = 0, Color.Orange, Color.LightBlue)
.ForeColor = Color.Black
End If
.Font = New Font("Arial", 12, FontStyle.Bold)
.Header = "[" & .Header & "], grp: " & .Group.GroupIndex.ToString
If .DisplayValue.Trim = String.Empty Then _
.DisplayValue = " <fehlend> "
If .DisplayValue.Length > 15 Then _
.DisplayValue = .DisplayValue.Substring(0, 15) & "..."
.DisplayValue = "value is " & .DisplayValue
.Summary = "contains " + .Group.Count.ToString & " rows"
End With
End Sub
Private Sub dgv_DataError(sender As Object, _
e As System.Windows.Forms.DataGridViewDataErrorEventArgs) _
Handles dgv.DataError
If e.ColumnIndex < 0 Then
e.Cancel = True : Exit Sub
End If
End Sub
End Class | |
Re: DatagridviewGrouper: Anwendungsbeispiel | | | Autor: ERBRU | Datum: 12.11.17 16:29 |
| Hallo ManfredX,
Super das Anwendungsbeispiel funktioniert, nun bin ich gespannt ob es in meinem Projekt dann korrekt läuft. Bzw. ich das einfach so hinbekomme, meine DGV ist ja bereits an eine BS gebunden ich vergass zu erwähnen das es auch Checkboxen Spalten gibt, da gibt es nichts zu beachten? und der Benutzer kann Daten wie gewohnt eingeben?
Danke auch für die PN
| |
DatagridviewGrouper umschalten | | | Autor: Manfred X | Datum: 12.11.17 17:31 |
| Wenn Du komplexe Aufgaben der Daten-Repräsentation bewältigen willst,
solltest Du entweder ein WPF-Projekt erstellen oder Du legst ein paar
Hundert Euro an und kaufst ein kommerzielles WinForms-Grid, das für
Deine Zwecke geeignete Funktionalitäten bietet.
Der DatagridviewGrouper scheint für die Daten-Anzeige entwickelt zu sein.
Wenn Du Daten editieren oder eingeben möchtest, wäre es
vermutlich zweckmäßig, den DatagridviewGrouper zunächst auf Nothing zu
setzen und ihn erst nach Abschluß des Editierens dem Grid wieder
zuzuordnen.
Beispiel für einen Button für das Umschalten
zwischen Editier- und Gruppier-Modus:
(Variablen: vgl. Anwendungsbeispiel)
Private Sub btnGrouper_Click(sender As Object, _
e As System.EventArgs) Handles btnGrouper.Click
If grp IsNot Nothing Then
gc.Enabled = False
gc.Grouper = Nothing
grp.Dispose()
grp = Nothing
dgv.AllowUserToAddRows = True
dgv.ReadOnly = False
btnGrouper.Text = "Gruppieren"
Else
grp = New Subro.Controls.DataGridViewGrouper(dgv)
grp.SetGroupOn("Groups")
grp.Options.StartCollapsed = True
gc.Grouper = grp
gc.Enabled = True
dgv.ReadOnly = True
dgv.AllowUserToAddRows = False
btnGrouper.Text = "Editieren"
End If
End Sub Im DisplayGroup-Event ist in dem Fall eine zusätzliche Abfrage/Bedingung
"If Value isnot Nothing" bei Aufbereitung des DisplayValue erforderlich.
Beitrag wurde zuletzt am 12.11.17 um 17:44:36 editiert. | |
Re: Daten in DGV anzeigen | | | Autor: ERBRU | Datum: 12.11.17 18:27 |
| Super ManfredX,
habe es hinbekommen alles Wunderbar.
Danke dir, super Arbeit von dir ich steig da nun auch langsam durch | |
Re: DatagridviewGrouper umschalten | | | Autor: ERBRU | Datum: 13.11.17 06:55 |
| ManfredX,
eine letzte Frage dazu
das Control lässt sich nur so auf die Form bringen?
mit dem Control lässt sich die Ansicht umschalten, und ggf. kann man die Guruppierung einstellen.
nur damit ich den Umgang mit dem Control besser verstehe.
Dim gc As New Subro.Controls.DataGridViewGrouperControl _
With {.Parent = Me}
Dim WithEvents grp As Subro.Controls.DataGridViewGrouper | |
DatagridviewGrouper Editable (Demo) | | | Autor: Manfred X | Datum: 13.11.17 07:46 |
| Das Control scheint unter bestimmten Bedingungen fehlerhaft zu arbeiten.
Ich empfehle für die Steuerung: 2 Comboboxen und einen Button:
Public Class frmDatagridviewGrouperEditable
Dim WithEvents cboColumns As New ComboBox With _
{.Parent = Me, .Width = 150, .Enabled = False, _
.DropDownStyle = ComboBoxStyle.DropDownList}
Dim WithEvents cboOptions As New ComboBox With _
{.Parent = Me, .Width = 150, .Left = 160, .Enabled = False, _
.DropDownStyle = ComboBoxStyle.DropDownList}
Dim WithEvents btnGrouper As New Button With _
{.Parent = Me, .Width = 100, .Left = 320, .Text = "Gruppieren"}
Dim WithEvents grp As Subro.Controls.DataGridViewGrouper
Dim bs As New BindingSource
Dim dgv As New DataGridView With _
{.Parent = Me, .Top = 50, .Width = 400, .Height = 300, _
.DataSource = bs, .ScrollBars = ScrollBars.Both}
Dim dt As New DataTable
Private Sub frmDatagridviewGrouperEditable_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(430, 400)
Me.MinimumSize = Me.Size
CreateData()
bs.DataSource = dt
SetCombos()
End Sub
Private Sub SetCombos()
With cboOptions.Items
.Add("Expand All")
.Add("Collapse All")
.Add("Sort Ascending")
.Add("Sort Descending")
.Add("Show Row Count")
.Add("Show Group Name")
End With
For i As Integer = 0 To dt.Columns.Count - 1
cboColumns.Items.Add(dt.Columns(i).ColumnName)
Next i
cboColumns.SelectedIndex = 0
End Sub
Private Sub SetOptions()
With grp
Select Case cboOptions.SelectedIndex
Case 0 : .ExpandAll()
Case 1 : .CollapseAll()
Case 2 : .GroupSortOrder = SortOrder.Ascending
Case 3 : .GroupSortOrder = SortOrder.Descending
Case 4 : .Options.ShowCount = Not .Options.ShowCount
Case 5 : .Options.ShowGroupName = Not .Options.ShowGroupName
End Select
End With
End Sub
Private Sub CreateData()
'Testspalten und -daten
With dt.Columns
.Add("Groups")
.Add("Numbers", GetType(Double))
.Add("Bools", GetType(Boolean))
End With
Dim rndm As New Random
For i As Integer = 0 To 100
Dim r As DataRow = dt.NewRow
If i Mod 5 = 0 Then
r("groups") = DBNull.Value
Else
r("Groups") = "g:" & rndm.Next(1, 5).ToString
End If
r("Numbers") = Math.Round(rndm.NextDouble, 1)
r("Bools") = If(rndm.NextDouble > 0.5, True, False)
dt.Rows.Add(r)
Next i
End Sub
Private Sub btnGrouper_Click(sender As Object, _
e As System.EventArgs) Handles btnGrouper.Click
If grp IsNot Nothing Then
grp.Dispose()
grp = Nothing
Enabler(False)
btnGrouper.Text = "Gruppieren"
Else
Enabler(True)
grp = New Subro.Controls.DataGridViewGrouper(dgv)
grp.SetGroupOn(cboColumns.Text)
btnGrouper.Text = "Editieren"
SetOptions()
End If
End Sub
Private Sub Enabler(ByVal ok As Boolean)
cboColumns.Enabled = ok
cboOptions.Enabled = ok
dgv.AllowUserToAddRows = Not ok
dgv.AllowUserToDeleteRows = Not ok
dgv.ReadOnly = ok
End Sub
Private Sub cboColumns_SelectedIndexChanged(sender As Object, _
e As System.EventArgs) Handles cboColumns.SelectedIndexChanged
If grp IsNot Nothing Then
grp.SetGroupOn(cboColumns.Text)
End If
End Sub
Private Sub grp_DisplayGroup(sender As Object, _
e As Subro.Controls.GroupDisplayEventArgs) Handles grp.DisplayGroup
If e.DisplayValue = String.Empty Then
e.DisplayValue = "<fehlend>"
End If
End Sub
Private Sub cboOptions_SelectedIndexChanged(sender As Object, _
e As System.EventArgs) Handles cboOptions.SelectedIndexChanged
SetOptions()
End Sub
End Class
Beitrag wurde zuletzt am 13.11.17 um 07:59:33 editiert. | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: ERBRU | Datum: 13.11.17 20:38 |
| Interessant ManfredX,
nun möchte ich aber ja den "Grouper starten" mit meiner Einstellung
- Standort
- CollapseAll
ich muss ja nun erst einstellen und kann dann erst Gruppieren
dann habe ich auch noch ein BS_ListChange Event
Private Sub BS_Lagerliste_ListChanged(sender As Object, e As _
System.ComponentModel.ListChangedEventArgs) Handles BS_Lagerliste.ListChanged
If BS_LagerDB_Liste.Count = 0 Then Return
lbl_Anzahl_Ereignisse.Text = BS_Lagerliste.Count.ToString
Anzahl_ermitteln()
End Sub
Public Sub Anzahl_ermitteln()
Dim gefunden As Integer = 0
Dim abgearbeitet As Integer = 0
Dim ueberfuehrt As Integer = 0
For Each row As DataGridViewRow In LagerlisteDataGridView.Rows
If row.Cells(10).Value = True Then
gefunden += 1
End If
Next
For Each row As DataGridViewRow In LagerlisteDataGridView.Rows
If row.Cells(11).Value = True Then
abgearbeitet += 1
End If
Next
For Each row As DataGridViewRow In LagerlisteDataGridView.Rows
If row.Cells(12).Value = True Then
ueberfuehrt += 1
End If
Next
chb_INMaximo.Text = String.Concat("gefunden " & "( " & gefunden & "" & _
")").ToString
chb_abgearbeitet.Text = String.Concat("abgearbeitet " & "( " & _
abgearbeitet & " )").ToString
chb_ueberfuehrt.Text = String.Concat("Überführt " & "( " & ueberfuehrt _
& " )").ToString
'Status
Dim status As Integer = gefunden + abgearbeitet + ueberfuehrt
lbl_Anzahl_abgearbeitet.Text = status
Dim gesamt As Integer = BS_Lagerliste.Count
lbl_Anzahl_offen.Text = gesamt - status
End Sub das in der Gruppierung nicht mehr funktioniert Werte werden nicht aktualisiert, gelle verstehst was ich meine? Ich meine du konntest ja nicht wissen das ich da ein BS Event nutze | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: Manfred X | Datum: 14.11.17 00:15 |
| Hallo!
Der Grouper funktioniert beim Editieren der gebundenen Daten
manchmal nicht richtig.
Deshalb sollte er beim Editieren abgeschaltet werden.
In meinem "Editable"-Beispiel wird das ListChanged-Event der
Bindingsource beim Gruppieren nicht ausgelöst, weil das Grid
in dem Fall "ReadOnly" geschaltet ist.
In der modif. Routine "SetCombos" kannst Du festlegen, mit welchen
Einstellungen die Grupppierung startet:
Private Sub SetCombos()
For i As Integer = 0 To dt.Columns.Count - 1
cboColumns.Items.Add(dt.Columns(i).ColumnName)
Next i
cboColumns.SelectedIndex = 1 'Index Start-Spalte festlegen
With cboOptions.Items
.Add("Expand All")
.Add("Collapse All")
.Add("Sort Ascending")
.Add("Sort Descending")
.Add("Show Row Count")
.Add("Show Group Name")
End With
cboOptions.SelectedIndex = 1 'Starteinstellung des Grouper
End Sub
Private Sub SetOptions()
If grp Is Nothing Then Exit Sub 'Einfügen
With grp
Select Case cboOptions.SelectedIndex
Case 0 : .ExpandAll()
Case 1 : .CollapseAll()
Case 2 : .GroupSortOrder = SortOrder.Ascending
Case 3 : .GroupSortOrder = SortOrder.Descending
Case 4 : .Options.ShowCount = Not .Options.ShowCount
Case 5 : .Options.ShowGroupName = Not .Options.ShowGroupName
End Select
End With
End Sub
Beitrag wurde zuletzt am 14.11.17 um 00:23:00 editiert. | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: ERBRU | Datum: 23.11.17 18:40 |
| Hallo ManfredX,
ist in deinem DatagridviewGrouper folgendes möglich?
Ich lasse mir die Standorte Bspw. gruppieren je Standort bekomme ich im Header ja die Datensatzanzahl
angezeigt das passt auch
ich habe da ja noch die Spalten abgearbeitet, gefunden lassen die sich auch zählen in der Gruppierten Header oder eine Spalte Kosten summieren?
| |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: Manfred X | Datum: 23.11.17 21:17 |
| Das "DisplayGroup"-Event bietet im e-Parameter eine "Summary"-Eigenschaft.
Zählen mußt Du selbst (z.B. Linq-Abfrage) und die Summen-Werte dort
als String eintragen. | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: ERBRU | Datum: 24.11.17 06:47 |
| Hallo ManfredX,
die Summen-Werte dort
als String eintragen. ? wo wäre das kannste das in der Demo einbauen?
ungefähr so
Standort1 13 rows davon 5 abgearbeitet noch 8 abarbeiten (Summe: 0.00€)
Standort2 17 rows davon 7 abgearbeitet noch 10 abarbeiten (Summe: 0.00€)
Danke, so wäre es doch auf einen Blick Super für den Benutzer oder? | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: Manfred X | Datum: 24.11.17 07:46 |
| Hallo!
Hier ein simples Beispiel, wie der Eventhandler zum obigen Beispiel
ausgebaut werden kann, um zusätzliche Summenangaben für Gruppen zu
berechnen und anzuzeigen:
Private Sub grp_DisplayGroup(sender As Object, _
e As Subro.Controls.GroupDisplayEventArgs) Handles grp.DisplayGroup
If e.DisplayValue = String.Empty Then
e.DisplayValue = "<fehlend>"
e.Summary = ""
ElseIf cboColumns.Text = "Groups" Then
'Es handelt sich um die relevante Gruppierungsvariable ...
Dim true_sum, false_sum As Integer
For i As Integer = 0 To bs.Count - 1
Dim r As DataRow = DirectCast(bs(i), DataRowView).Row
'Gehört der Datensatz zur aktuellen Gruppe?
If Not IsDBNull(r("groups")) AndAlso _
r("groups").ToString.ToLower = e.DisplayValue.ToLower Then
'Summen für aktuelle Gruppe berechnen
If Not IsDBNull(r("Bools")) Then
If CBool(r("bools")) Then
true_sum += 1
Else
false_sum += 1
End If
End If
End If
Next i
'Summenwerte als Summary anzeigen
e.Summary = "Bools = true: " & true_sum.ToString & _
" false: " & false_sum.ToString
End If
End Sub Bei Tabellen mit vielen Datensätzen sollte die Berechnung und Speicherung
der Summen je Gruppe vorab erfolgen. Im Event-Handler erfolgt nur die Anzeige.
Beitrag wurde zuletzt am 24.11.17 um 07:57:42 editiert. | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: ERBRU | Datum: 24.11.17 19:46 |
| Hallo ManfredX,
Danke genau wie ich es mir vorgestellt habe.
Habe es bei mir so umgesetzt:
kann man das so mit der Cbo machen? oder besser festlegen auf eine 'Spalte'
If e.DisplayValue = String.Empty Then
e.DisplayValue = "<fehlend>"
e.Summary = ""
End If
Dim _abgearbeitet, _abarbeiten As Integer
Dim _gefunden As Integer
For i As Integer = 0 To BS_Lagerliste.Count - 1
Dim r As DataRow = DirectCast(BS_Lagerliste(i), DataRowView).Row
'Gehört der Datensatz zur aktuellen Gruppe?
If Not IsDBNull(r(cboColumns.Text)) AndAlso _
r(cboColumns.Text).ToString.ToLower = e.DisplayValue.ToLower Then
'Summen für aktuelle Gruppe berechnen
If Not IsDBNull(r("abgearbeitet")) Then
If CBool(r("abgearbeitet")) Then
_abgearbeitet += 1
Else
_abarbeiten += 1
End If
If Not IsDBNull(r("INMAXIMO")) Then
If CBool(r("INMAXIMO")) Then
_gefunden += 1
End If
End If
End If
End If
Next i
'Summenwerte als Summary anzeigen
e.Summary = "gefunden: " & _gefunden.ToString & " abgearbeitet: " & _
_abgearbeitet.ToString & " noch abarbeiten: " & _abarbeiten.ToString vorher gab es immer die gezählten Datensätze der Gruppe (Zahl) wie holt man sich die wieder?
Beitrag wurde zuletzt am 24.11.17 um 19:48:12 editiert. | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: ERBRU | Datum: 25.11.17 13:20 |
| hier noch die Summe "Kosten" für die aktuelle Gruppe
ist das so OK ManfredX? es funktioniert
nun fehlt mir nur noch die Anzahl Datensätze pro aktueller Gruppe?
Private Sub grp_DisplayGroup(sender As Object, _
e As Subro.Controls.GroupDisplayEventArgs) Handles grp.DisplayGroup
If e.DisplayValue = String.Empty Then
e.DisplayValue = "<fehlend>"
e.Summary = ""
End If
Dim true_sum, false_sum As Integer
Dim BM_Wert As Double
For i As Integer = 0 To BS_Vorgangdetails.Count - 1
Dim r As DataRow = DirectCast(BS_Vorgangdetails(i), DataRowView).Row
'Gehört der Datensatz zur aktuellen Gruppe?
If Not IsDBNull(r(cboColumns.Text)) AndAlso _
r(cboColumns.Text).ToString.ToLower = e.DisplayValue.ToLower Then
'Summen für aktuelle Gruppe berechnen
If Not IsDBNull(r("Lieferschein")) Then
If CBool(r("Lieferschein")) Then
true_sum += 1
Else
false_sum += 1
End If
'Summe Kosten aktuelle Gruppe bilden
If Not IsDBNull(r("Kosten")) Then
If CDbl(r("Kosten")) Then
BM_Wert += CDbl(r("Kosten"))
End If
End If
End If
End If
Next i
'Summenwerte als Summary anzeigen
e.Summary = "LS vorh.: " & true_sum.ToString & " es fehlen: " & "( " & _
false_sum.ToString & " )" & " LS, " & " BM-Wert: " & String.Format( _
"{0:00.00} €", BM_Wert)
End Sub | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: Manfred X | Datum: 25.11.17 14:20 |
| Hallo!
Wenn Du Summary nutzt, muß offensichtlich bei Bedarf die Angabe Group.Count
dort explizit eingetragen werden:
e.Summary = ""
If grp.Options.ShowCount Then
e.Summary = "Sätze: " & e.Group.Count.ToString & " "
End If
e.Summary &= "Bools = true: " & true_sum.ToString & _
" false: " & false_sum.ToString Dieser Hinweis war bereits in meinem ersten Beispiel enthalten:
http://www.vbarchiv.net/forum/id10_i75987t75975_datagridviewgrouper-anwendungsbeispiel.html | |
Re: DatagridviewGrouper Editable (Demo) | | | Autor: ERBRU | Datum: 25.11.17 16:09 |
| Sorry Manfred X,
habe ich übersehen mein Fehler.
Danke für deine Geduld mit mir funktioniert Super! | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|