vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 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 - Ein- und Umsteiger
Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 14:44

Und schon wieder eine Frage, die zweite, die mich heute stundenlang beschäftigt hat.
Ich habe herausgefunden wie ich ein DataTable nutze um ein Tortendiagramm zu befüllen.

Mein Problem ist aber folgendes:
Ich habe in einer Spalte eine Reihe von möglichen Werten, die restlichen Spalten eines Datensatzes können völig anders aussehen. z.b.

Jürgen, Spanisch, mittelgut
Herbert, Französisch, brilliant
Lisa, Spanisch, brilliant

Nun muss ich die Zahl der Vorkommen dieser Begriffe zählen, also dass von 3 Leuten 2 Spanisch sprechen und 1 Französisch. Das soll dann in ein Tortendiagramm, "2 Drittel Torte Spanisch, 1 Drittel Französisch". Wie die Leute heißen ist wurst. Ebenso würde ich dann auch die letzte Spalte ("Lernerfolg") in ein Diagramm packen. Ein bisschen Statistik

Und auch hier bin ich vollkommen ratlos. Ich finde einfach keine Funktion, die es mir erlaubt zu zählen, wie oft in einem DataTable ein bestimmter Wert identisch vorkommt.

Beitrag wurde zuletzt am 19.09.11 um 14:47:20 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: ModeratorDaveS (Moderator)
Datum: 19.09.11 15:03

Du kannst die Werte mittels Linq ermitteln, etwa so
        Dim counts = From d As DataRow In myDataTable.AsEnumerable() Group d By _
          Language = d.Field(Of String)("Language") Into g = Group _
          Select Language, g.Count
        DataGridView2.DataSource = counts.ToList()

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 15:03

Hallo!

In einer generischen Dictionary(of String, Integer) prüfst Du beim
Durchlaufen der Zeilen jeweils, ob der Schlüssel-Eintrag z.B. "spanisch"
schon vorhanden ist (Contains-Methode).
Falls nein: Neuen Schlüssel in Dictionary eintragen, aktuelle Sprache als
Schlüssel verwenden und den Wert auf 1 setzen.
Falls ja: Wert des Bezeichners bei diesem Schlüssel (=Sprache) um 1
hochsetzen.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 15:11

Vielen Dank für die Antworten!
Das Blöde ist dass ich vorher nicht wissen kann, wie die Werte heißen könnten. Ich kann also nicht nach "Spanisch" suchen, weil das nicht unbedingt dabei sein muss. Kann man das auch so machen, dass man generell alles was da ist zählt und dann daraus ein DataTable macht.

Beispiel:
Die Daten sind wie oben
Jürgen, Spanisch, mittelgut
Herbert, Französisch, brilliant
Lisa, Spanisch, brilliant

Ich wende die Funktion auf die spalte 2 (also index 1) an. Herauskommen soll dann ein DataTable mit 2 Spalten
Spanisch, 2
Französisch, 1
das ich dann als Quelle für ein Toertendiagramm nutzen kann.

Man kommt sich echt doof vor wenn man keine Ahnung hat - aber irgendwann muss man es ja mal lernen

EDIT:
Die Daten sind übrigens in einem DataTable mit dem sinnreichen Namen dt. Dieses wird aus einer Textdatei befüllt, aber das klappt zum Glück

Beitrag wurde zuletzt am 19.09.11 um 15:13:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: ModeratorDaveS (Moderator)
Datum: 19.09.11 15:15

Der Linq Code liefert eine Liste (List (Of ) mit Elementen mit Spalten Sprache ("Language") und Anzahl ("Count"). Reicht das nicht?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 15:18

Hallo!

Bei beiden Vorschlägen ist es nicht erforderlich, vorher zu wissen,
welche Sprachen in den Datenzeilen vorkommen.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 15:19

Mm, wahrscheinlich reicht es, aber ich bin wohl zu doof den Code anzuwenden. Das hier hab ich gemacht:

Dim counts = From d As DataRow In dt.AsEnumerable() Group d By _
         Language = d.Field(Of String)(6) Into g = Group _
         Select Language, g.Count
        TextBox1.Text = counts.ToString
Die Zeile d.Field(Of String)(6) verweist auf den Index 6 im DataTable dt, das ist die Sprachenspalte. Ich kann die nicht mit ihrem Namn ansprechen, weil der sich zur Laufzeit verändert (Lokalisierung). Ich mache wohl was falsch.

EDIT:
Ok,das Problem wird wohl sein dass VB jetzt ja gar keine Liste mehr bastelt, sondern einen String. Eine Liste lässt es mich aber nirgens anzeigen, wollte die Ausgabe halt mal sehen.
Und irgendwie klappt auch die Zuweisung auf Spalte 7 (Index 6) des DataTables nicht.

Zweiter EDIT:
Oh bin ich blöd. Dein Code klappt wunderbar. Klar, kann ja nicht klappen wenn ich dadraus eine Liste mache. Jetzt muss ichs nur noch hinbekommen, die Liste als DataSource für die Torte zu nehmen.

Beitrag wurde zuletzt am 19.09.11 um 15:28:30 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: ModeratorDaveS (Moderator)
Datum: 19.09.11 15:29

Warum sollten die DataTable Spalten lokalisiert werden? Das hat nichts damit zu tun was in einem DGV oder Graph sichtbar wird, das bestimmen Eigenschaften des Controls. Aber ein numerischer Index geht auch. Das beiseite, du kannst auch aus den Daten eine DataTable bauen, wenn das eher vertraut ist, etwa so
        Dim dt1 As New DataTable("Sprachenhäufigkeit")
        dt1.Columns.Add("Sprache", GetType(String))
        dt1.Columns.Add("Anzahl", GetType(Integer))
 
        For Each d1 In From d As DataRow In dt.AsEnumerable() Group d By _
          Sprache = d.Field(Of String)(6) Into g = Group _
          Select Sprache, g.Count
            Dim dr1 As DataRow = dt1.NewRow
            dr1("Sprache") = d1.Sprache
            dr1("Anzahl") = d1.Count
            dt1.Rows.Add(dr1)
        Next
 
        DataGridView2.DataSource = dt1
Und wie Manfred X schreibt, du musst nicht vorher wissen welche Werte in der Spalte auftauchen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 15:37

Ja, vielen Dank. Jetzt hab ichs gepeilt. Fehlt nur noch die Anbindung an die Torte.
Graph1.DataSource = dt1 klappt leider nicht Ich nehme an ich muss das noch irgendwie der Series1 dort zuweisen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 16:12

Hallo!

Angenommen dt ist die Datatable mit den Angaben/Spalten zur Language und zu Count:

   With Chart1
       .Series.Clear()
       .Series.Add("default")
       .Series("default").ChartType = _
         DataVisualization.Charting.SeriesChartType.Pie
       .DataSource = dt
       .Series("default").XValueMember = "Language"
        .Series("default").YValueMembers = "Count"
   End With
MfG
Manfred

Beitrag wurde zuletzt am 19.09.11 um 16:14:48 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 18:41

Es wird immer seltsamer, egal was ich mache, es kommt immer eine Exception dass die zweite Spalte nicht gefunden wurde.

Hier der komplette Code:
Dim dt1 As New DataTable("Sprachenhäufigkeit")
        dt1.Columns.Add("Sprache", GetType(String))
        dt1.Columns.Add("Zahl", GetType(Integer))
 
        For Each d1 In From d As DataRow In dt.AsEnumerable() Group d By _
          Sprache = d.Field(Of String)(6) Into g = Group _
          Select Sprache, g.Count
            Dim dr1 As DataRow = dt1.NewRow
            dr1("Sprache") = d1.Sprache
            dr1("Zahl") = d1.Count
            dt1.Rows.Add(dr1)
        Next
 
        DataGridView1.DataSource = dt1
        With Chart1
            .Series.Clear()
            .Series.Add("default")
            .Series("default").ChartType = _
              DataVisualization.Charting.SeriesChartType.Pie
            .DataSource = dt
            .Series("default").XValueMember = "Sprache"
            .Series("default").YValueMembers = "Zahl"
        End With
Das Data Grid View zeigt alles wunderbar an, inklusive der "Zahl" Spalte, nur das Diagramm beschwert sich. Ratlos...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 18:45

Hallo!

Die Datasource des Graphen muss bei Dir "dt1" heißen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 18:47

Ach Gott bin ich dämlich - ich hab den Code bestimmt 100mal gelesen und es trotzdem übersehen, danke!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 18:51

Hallo!

Verwende "Option Strict On" und "Option Explicit On" im Kopf der Codedateien oder als IDE-Voreinstellung. Nicht deklarierte Bezeichner werden dann angemahnt.

Beitrag wurde zuletzt am 19.09.11 um 18:53:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 18:56

Beides ist an, das doofe ist dass es "dt" ja gibt - das ist der data table, der ein anderes Grid View befeuert. Aber das bringt mich auf die geniale Idee, den jetzt mal etwas intelligenter zu benennen

Schade dass die Diagramme so altbacken aussehen. Aber extra nur dafür 300$ für DotNetBar auszugeben ist mir ein bisschen viel...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 19:01

Hallo!

Man kann die Standardeinstellungen der Charts "aufpeppen".
Farbverläufe, 3D-Charts usw. sind durchaus möglich. Dafür ist nur
ein wenig Einarbeitung in die Klassen/Methoden dieses recht komplexen
Steuerelements notwendig.

Allerdings: Für wissenschaftlich-technische Anwendungen ist "Firlefanz"
meist überflüssig. Hier kommt es z.B. bei Pie-Charts eher darauf an,
dass die relativen Häufigkeiten sich nicht extrem unterscheiden oder dass
zu viele Tortenstücke (mehr als 12-15) entstehen. In solchen Fällen sollte man
automatisch auf Bars umschalten und ggf. logarithmische Skalen einsetzen.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 19:21

Klappt alles vorzüglich, wunderbar!
Wahrscheinlich eine saublöde Frage: Kann man irgendwie einem Balkendiagramm beibringen, Scrollbalken zu bekommen wenn es zu groß wird? Also quasi genau wie im ListView, dass ma scrollen muss wenn zu viele Balken da sind?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 19:32

Hallo!

Du kannst die Breite des Chart-Control von der Anzahl der Bars
abhängig machen (und z.B. noch Platz für die Legende vorsehen).
Dieses ChartControl setzt Du in ein Panel, dessen Autoscroll-Eigenschaft
auf "true" steht. Das Chart-Control im Panel z.B. links andocken.

MfG
Manfred

Beitrag wurde zuletzt am 19.09.11 um 19:33:57 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 19:45

Schlau

Ich finde aber irgendwie keine AutoSize-Eigenschaft, oder muss man das von Hand machen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 20:00

Hallo!

Hatte ich nicht "AutoScroll" geschrieben ... ????
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 20:04

Ja, Auto Scroll beim Panel finde ich, aber ich schaffe es nicht, dass der Chart automatisch größer wird, da finde ich kein Auto Scroll.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Manfred X
Datum: 19.09.11 20:22

Hallo!

Du mußt eine gewünschte Breite pro Bar (in Pixel) definieren und dann
anhand der Anzahl der Bars die erforderliche Breite des Graphen selbst
setzen (Width-Eigenschaft). Das Graph-Objekt kann nicht "automatisch"
wissen, wie breit/hoch die Darstellung werden soll. Die (Bar-) Graphik wird
automatisch in die jeweils verfügbare (vorgegebene) Breite/Höhe des Graph-
Control eingepasst (unter Beachtung der weiteren Elemente: Titles, Legends
usw.).

Übrigens: Das Scrollen eines Chart ist in den meisten Fällen keine gute
Lösung. Man sollte Diagrammen möglichst auf einem Blick die relevanten
Informationen entnehmen können.

Beitrag wurde zuletzt am 19.09.11 um 20:31:38 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Novatlan
Datum: 19.09.11 22:16

Ok, danke!
Ich habe mich jetzt mal mit Bleistift und Papier hingesetzt und erstmal Mockups gebastelt. Für die extrem datenintensiven Statistiken werde ich Tabellen nehmen, wodurch ich dann tatsächlich ohne riesige Grafiken auskomme.
Irgendwie macht es Spaß, nach 6 Jahren Pause mal wieder ein bisschen zu programmieren, auch wenns nur was kleines ist
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Erichbru
Datum: 20.02.24 13:43

ist ja schon ein älterer Post, aber ich frag trotzdem mal nach

und wer kann mir sagen was genau sind eigentlich "Buchungsarten"

- Ausgabe
- Einnahmen
- ??


wie kann man denn da noch eine Spalte bekommen mit der "Summe" von den Einzelposten der jeweiligen Position

bei mir heißt die Spalte in der Datenherkunft Betrag (Double)



das funktioniert ja nicht!

Private Sub Kategoriehäufigkeit()
        Dim dt1 As New DataTable("Kategoriehäufigkeit")
        dt1.Columns.Add("Kategorie", GetType(String))
        dt1.Columns.Add("Anzahl", GetType(Integer))
        dt1.Columns.Add("Gesamtbetrag", GetType(Double))
 
        For Each d1 In From d As DataRow In ArchivDB.Kontodetails.AsEnumerable( _
          ) Group d By _
          Kategorie = d.Field(Of String)("Kategorie") Into g = Group _
          Select Kategorie, g.Count
            Dim dr1 As DataRow = dt1.NewRow
            dr1("Kategorie") = d1.Kategorie
            dr1("Anzahl") = d1.Count
            dr1("Gesamtbetrag") = ??
            dt1.Rows.Add(dr1)
        Next
 
        DataGridView1.DataSource = dt1
        With ChartKategorie
            .Series.Clear()
            .Series.Add("default")
            .Series("default").ChartType = _
              DataVisualization.Charting.SeriesChartType.Pie
            .DataSource = dt1
            .Series("default").XValueMember = "Kategorie"
            .Series("default").YValueMembers = "Anzahl"
        End With
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Häufigkeit eines Wertes in einem DataTable zählen und in Tortendiagramm anzeigen 
Autor: Erichbru
Datum: 20.02.24 18:37

mittlerweile habe ich es gecheckt, oder ?



jetzt soll das Chart noch angepasst werden Prozente wäre doch nicht schlecht oder ?

wer hat da Ideen ? und was sagt ihr zu der Lösung ?


 Private Function Category_output(year As Integer) As DataTable
        Dim dt As DataTable = ArchivDB.Kontodetails
        Dim cal As Globalization.Calendar = _
          Globalization.CultureInfo.CurrentCulture.Calendar
 
        Dim q = From row As DataRow In dt
          Let Ausgaben = row.Field(Of Double)("Betrag")
          Let Kategorie = row.Field(Of String)("Kategorieausgabe")
          Let ID = row.Field(Of Integer)("KategorieausgabeID")
        Where year = row.Field(Of Date)("Buchungsdatum").Year _
        AndAlso ID > 0
        Group By Kat = Kategorie Into Sum(Ausgaben), Count()
 
        '--------Ende deklarieren
        Dim df As New DataTable
        With df.Columns
            .Add("Kategorie", GetType(String))
            .Add("Anzahl", GetType(Integer))
            .Add("Ausgaben", GetType(Double))
        End With
 
        For Each el In q
            df.Rows.Add(el.Kat, el.Count, el.Sum)
        Next el
 
 
 
        DataGridView1.DataSource = df
        With ChartKategorie
            .Series.Clear()
            .Series.Add("default")
            .Series("default").ChartType = _
              DataVisualization.Charting.SeriesChartType.Pie
            .DataSource = df
            .Series("default").XValueMember = "Kategorie"
            .Series("default").YValueMembers = "Anzahl"
        End With
 
        Return df
    End Function
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