vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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
Monatsdiagramm 
Autor: ERBRU
Datum: 25.02.18 13:06

sorry war in der falschen Rubrik

mit dieser Funktion werte ich Daten pro Woche aus, nun soll auch der Monat möglich sein?

die Funktion stammt ursprünglich von Manfred X

beim Monat habe ich fehlendes Wissen den richtig zu erwischen.
es wird zum Schluss auch ein Chart gezeichnet

Private Function GetFreq1(ByVal week As Integer, _
       year As Integer) As DataTable
 
        'Dim year As Integer = cbx_Jahr.SelectedValue
 
 
        Dim dt As DataTable = ABLAGEPUAM.Vorgang
        Dim cal As Globalization.Calendar = _
          Globalization.CultureInfo.CurrentCulture.Calendar
 
        Dim q = From row As DataRow In dt
              Let wk As Integer = _
                cal.GetWeekOfYear(row.Field(Of Date)("angelegtam"), _
                Globalization.CalendarWeekRule.FirstFourDayWeek, _
                DayOfWeek.Monday)
              Where year = row.Field(Of Date)("angelegtam").Year _
               AndAlso wk = week _
                AndAlso row.Field(Of Integer)("IDAblage") = row.Field(Of _
                Integer)("IDAblage")
              Group By art = row.Field(Of String)("Ablagename") Into Count()
 
        Dim df As New DataTable
        df.Columns.Add("Ablagename") : df.Columns.Add("Count", GetType( _
          Integer)) : df.Columns.Add("Cum", GetType(Double)) _
                                        : df.Columns.Add("CumPerc", GetType( _
                                        Double))
 
        For Each el In q
            df.Rows.Add(el.art, el.Count)
        Next el
 
        Dim bs As New BindingSource With {.DataSource = df}
        bs.Sort = "Count DESC"
 
        Dim sm As Integer = 0
        For i As Integer = 0 To bs.Count - 1
            Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
            'Häufigkeiten kumulieren
            sm += CInt(row("Count"))
            row("cum") = sm
        Next i
 
        'Kumulierte Werte in Prozentanteile umrechnen
        For i As Integer = 0 To bs.Count - 1
            Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
            row("CumPerc") = Math.Round(CInt(row("Cum")) / sm * 100, 2)
        Next i
 
        'Daten in der DGV anzeigen
        DGV1.DataSource = bs
 
        With DGV1
            .Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnsMode.Fill
            .Columns(1).Width = 60
        End With
 
        With DGV1
            .EnableHeadersVisualStyles = False
            .ColumnHeadersDefaultCellStyle.Alignment = _
              DataGridViewContentAlignment.MiddleCenter
            .ColumnHeadersDefaultCellStyle.BackColor = Color.DimGray
            .ColumnHeadersDefaultCellStyle.ForeColor = Color.FloralWhite
            .BackgroundColor = Color.LightGray
            .Font = New Font("Consolas;", 9.5, FontStyle.Regular)
            .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
            .ColumnHeadersHeight = 38
            .ColumnHeadersHeightSizeMode = _
              DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            .RowHeadersVisible = False
            .GridColor = System.Drawing.Color.DarkGray
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .DefaultCellStyle.WrapMode = DataGridViewTriState.True
            .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        End With
        With DGV1.DefaultCellStyle
            .SelectionForeColor = Color.OldLace
            .SelectionBackColor = Color.Olive
            .BackColor = Color.LightGray
            .ForeColor = Color.Black
            .Font = New Font("Consolas;", 8.0, FontStyle.Regular)
        End With
        With DGV1.AlternatingRowsDefaultCellStyle
            .SelectionForeColor = Color.OldLace
            .SelectionBackColor = Color.Olive
            .BackColor = Color.WhiteSmoke
            .ForeColor = Color.Black
            .Font = New Font("Consolas;", 8.0, FontStyle.Regular)
        End With
        'Ende Auswertung
        'Chart anzeigen
 
    End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Monatsdiagramm 
Autor: Manfred X
Datum: 25.02.18 17:40

Du kannst eine neue Routine schreiben, der statt der
Woche der Monat als Parameter "monat" gegeben wird.

Es ist in dieser Routine vermutlich nur
Let wk as integer = .....
zu ersetzen durch
Let mn As Integer = row.Field(Of Date)("angelegtam").Month
und im folgenden Code wk durch mn und week durch monat.
(So wie die die bereits im Code enthaltene Bedingung zu "year").

Was die Where-Bedingung zur "IDAblage" bewirken soll,
verstehe ich nicht. Die ist immer erfüllt.


Oder Du sparst die zweite Routine und ergänzt statt dessen
einen dritten Parameter "IntervalType", aus dem hervorgeht,
wie das Intervall gebildet werden soll (Woche oder Monat).
Eine entsprechende If-Bedingung in Linq-Where entscheidet
anhand dieses Parameters, ob die Woche oder der Monat
aus "angelegtam" ermittelt und als Auswahl-Bedingung verwendet
wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Monatsdiagramm 
Autor: ERBRU
Datum: 25.02.18 18:27

Hallo Manfred X,

Danke für den Hinweis

so ?

einen dritten Parameter "IntervalType", aus dem hervorgeht,
wie das Intervall gebildet werden soll (Woche oder Monat).
Eine entsprechende If-Bedingung in Linq-Where entscheidet
anhand dieses Parameters, ob die Woche oder der Monat
aus "angelegtam" ermittelt und als Auswahl-Bedingung verwendet das wäre evtl. für Benutzer besser
zeig mir den dritten Parameter Bitte.

möchte aus einer Liste Monat auswählen?

  Private Sub Monatsliste()
        Dim lst_Monate As New List(Of String) From {"", "Januar", "Februar", _
          "März", "April", "Mai", "Juni", "Juli", "August", "September", _
          "Oktober", "November", "Dezember"}
        cbx_Monat.Items.AddRange(lst_Monate.ToArray)
        cbx_Monat.SelectedIndex = 0
        lst_Monate.Clear()
    End Sub
 Dim dt As DataTable = ABLAGEPUAM.Vorgang
        Dim cal As Globalization.Calendar = _
          Globalization.CultureInfo.CurrentCulture.Calendar
 
        Dim q = From row As DataRow In dt
              Let mn As Integer = row.Field(Of Date)("angelegtam").Month
              Where year = row.Field(Of Date)("angelegtam").Year _
               AndAlso mn = Month(row.Field(Of Date)("angelegtam")) _
              Group By art = row.Field(Of String)("Ablagename") Into Count()
 
        Dim df As New DataTable
        df.Columns.Add("Ablagename") : df.Columns.Add("Count", GetType( _
          Integer)) : df.Columns.Add("Cum", GetType(Double)) _
                                        : df.Columns.Add("CumPerc", GetType( _
                                        Double))
 
        For Each el In q
            df.Rows.Add(el.art, el.Count)
        Next el
 
        Dim bs As New BindingSource With {.DataSource = df}
        bs.Sort = "Count DESC"
 
        Dim sm As Integer = 0
        For i As Integer = 0 To bs.Count - 1
            Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
            'Häufigkeiten kumulieren
            sm += CInt(row("Count"))
            row("cum") = sm
        Next i
 
        'Kumulierte Werte in Prozentanteile umrechnen
        For i As Integer = 0 To bs.Count - 1
            Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
            row("CumPerc") = Math.Round(CInt(row("Cum")) / sm * 100, 2)
        Next i
 
        'Daten in der DGV anzeigen
        DGV1.DataSource = bs
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Monatsdiagramm 
Autor: Manfred X
Datum: 25.02.18 18:33

Seien "year" und "mnth" die Parameter einer Routine ....
(Lass das Let im Where weg.)

Where year = row.Field(Of Date)("angelegtam").Year _
AndAlso mnth = row.Field(Of Date)("angelegtam").Month _
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Monatsdiagramm 
Autor: ERBRU
Datum: 25.02.18 18:44

OK, da tut sich jetzt garnichts mehr

  Dim mnth As Integer
        Dim dt As DataTable = ABLAGEPUAM.Vorgang
        Dim cal As Globalization.Calendar = _
          Globalization.CultureInfo.CurrentCulture.Calendar
 
        Dim q = From row As DataRow In dt
              Where year = row.Field(Of Date)("angelegtam").Year _
               AndAlso mnth = Month(row.Field(Of Date)("angelegtam")) _
              Group By art = row.Field(Of String)("Ablagename") Into Count()
 
        Dim df As New DataTable
        df.Columns.Add("Ablagename") : df.Columns.Add("Count", GetType( _
          Integer)) : df.Columns.Add("Cum", GetType(Double)) _
                                        : df.Columns.Add("CumPerc", GetType( _
                                        Double))
 
        For Each el In q
            df.Rows.Add(el.art, el.Count)
        Next el
 
        Dim bs As New BindingSource With {.DataSource = df}
        bs.Sort = "Count DESC"
 
        Dim sm As Integer = 0
        For i As Integer = 0 To bs.Count - 1
            Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
            'Häufigkeiten kumulieren
            sm += CInt(row("Count"))
            row("cum") = sm
        Next i
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Monatsdiagramm 
Autor: Manfred X
Datum: 25.02.18 19:16

mnth als Parameter übergeben !!!!!!!!!!!!!!!!!!!!!!

'Auf dem Formular eine Listbox für Monatsauswahl erstellen
Dim WithEvents Months As New ListBox With {.Parent = Me}
 
'Im Load-Event der Form diese Listbox füllen
'(Geht auch direkt per Rückgriff auf die entsprechende Enumeration)
For i As Integer = 1 To 12
   months.Items.Add(DateAndTime.MonthName(i))
Next i
 
'Im Listbox-Event die Graphik anfordern
Private Sub Months_SelectedIndexChanged(sender As Object, _
    e As EventArgs) Handles Months.SelectedIndexChanged
 
    Dim lbo As ListBox = DirectCast(sender, ListBox)
    if lbo.selectedindex >= 0 then _ 
       Getfrequencies(2017, lbo.SelectedIndex + 1)
End Sub
 
 
'So muß die gerufene Methode deklariert sein
Private Sub getfrequencies(ByVal year As Integer, mnth As Integer)
   'Linq-Code etc.       
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Monatsdiagramm 
Autor: ERBRU
Datum: 28.02.18 11:32

Danke Manfred X, statt der Listbox habe ich eine Combobox gewählt

funktioniert jetzt für Woche / Monat --> Danke
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