vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Daten 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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten in DGV anzeigen 
Autor: Manfred X
Datum: 11.11.17 20:48

Hallo!

Projekttyp: Windows Presentation Foundation
https://msdn.microsoft.com/de-de/library/ff407126(v=vs.110).aspx
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten in DGV anzeigen 
Autor: Manfred X
Datum: 11.11.17 23:35

Hallo!

Eventuell die DatagridViewGrouper-Klasse (nicht getestet!):
https://www.codeproject.com/Tips/995958/DataGridViewGrouper
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten in DGV anzeigen 
Autor: ERBRU
Datum: 12.11.17 12:51

C# auf dem Rechner installiert hast, habe ich aber nicht installiert
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel