Messagebox

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von diylab.

    Hallo Forum,

    habe auf meiner Form eine ListView mit verschiedenen Eintraegen.
    mit der angehängten Funktion wird eine Suche in der LV durchgeführt.
    das Ergebnis in eine MessageBox ausgegeben. Funktioniert soweit auch ganz Gut.

    nun möchte ich noch die Info der gefundenen Eintraege (Anzahl + die Summe der Ausfallzeit) mit anzeigen.
    da komm ich nicht ganz mit klar.

    VB.NET-Quellcode

    1. ' Button Suche
    2. Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
    3. Dim searchstring As String = txtStringSuche.Text
    4. Dim searchlist As List(Of ListViewItem) = SearchLV(LVSchichtbuch, searchstring, 7)
    5. Dim mssage As String = ""
    6. For Each item In searchlist
    7. For Each subitem As ListViewItem.ListViewSubItem In item.SubItems
    8. mssage += subitem.Text + "-"
    9. Next
    10. mssage = mssage.Substring(0, mssage.Length - 1) + vbNewLine
    11. Next
    12. MessageBox.Show(mssage)
    13. ' soll die gefundenen Einträge (Suchbegriff als Anzahl anzeigen + Summe der Stoerminuten)
    14. ' Beispiel 3 Eintraege |zur Eingabe| gefunden (15 Minuten Ausfallzeit gemeldet)
    15. Dim itm As ListViewItem
    16. With LVSchichtbuch
    17. itm = .FindItemWithText(txtStringSuche.Text, False, 1, True)
    18. If Not itm Is Nothing Then
    19. .Items.Item(itm.Index).Selected = True
    20. End If
    21. End With
    22. itm = Nothing
    23. End Sub
    24. ' Funktion
    25. Public Function SearchLV(ByVal lv As ListView, ByVal SearchString As String, ByVal Colmn As Integer) As List(Of ListViewItem)
    26. SearchLV = (From item In lv.Items.OfType(Of ListViewItem)()
    27. Where item.SubItems(Colmn).Text.Contains(SearchString)
    28. Select item).ToList
    29. If SearchLV.Count = 0 Then
    30. SearchLV.Add(New ListViewItem("Nichts gefunden"))
    31. End If
    32. End Function
    Bilder
    • Search Ergebnis.JPG

      67,75 kB, 632×392, 251 mal angesehen
    Hallo,

    Dein Ansatz ist recht gruslig - das ListView (warum nehmen so viele Leute dieses komische ListView?) sollte Deine Daten nur anzeigen und nicht auf Deine Weise durchsuchbar sein.
    Außerdem verstehe ich nicht, das die Suchergebinisse in einer Messagebox ausgegeben werden - das ist doch seltsam, wenn man schon ein ListView hat..

    Ein besserer Ansatz, um Deine Anforderungen viel bequemer und mit weniger Code durchzuführen:
    • pack Deine Daten in ein DataSet oder einfach nur in eine DataTable
    • generiere daraus ein DataView - dort kannst Du sehr bequem über den RowFilter Suchen und Filtern
    • binde dieses DataView an ein DataGridView

    Alles ganz einfach und sehr mächtig.
    Solltest Du offen für dieses Modell sein, wird Dir sicher gern geholfen!

    LG, schönes WE,
    Bruno
    Hallo und Danke das ihr da helfen wollt.

    für die DGV muss ich alles ändern?

    habe 2 ListView die je mit Daten der Instandhaltung, und der Fertigung geladen wird um keinen Mix zu haben.
    Soll aber vergleich bar bleiben. darum die Suche in 1. Instandhaltung Ergebnis 2. Fertigung Ergebnis

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub Daten_Schichtbuch()
    2. Dim myDate As String = DTP_Von.Value.ToShortDateString
    3. txtDTP_Von.Text = Now.AddDays(-7).ToShortDateString()
    4. txtDTP_Bis.Text = Now.AddDays(-1).ToShortDateString()
    5. Dim differenz As Long = DateDiff("d", txtDTP_Von.Text, txtDTP_Bis.Text)
    6. Try
    7. Dim verbindung As OleDb.OleDbConnection = _
    8. New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TPM\TPMDB.mdb")
    9. ' SQL String generieren
    10. Dim strsql = "SELECT tblStoerungen.StörungID_P, " & _
    11. "tblStoerungen.StoerDatum, " & _
    12. "tblMaschine.Bezeichnung, " & _
    13. "tblArbeitsfolge.Arbeitsfolge, " & _
    14. "'Problem:|' & [Stoergrund] & '|' & 'Eingriff IH: |' & [BemerkungMaßnahme] AS Meldung, " & _
    15. "tblStoerungen.StoerZeitM, " & _
    16. "tblMitarbeiterNamen.Name, tblBereiche.Bereich, " & _
    17. "[Schichtart] & ' ( DS ' & [DS] & ')' AS Schicht, " & _
    18. "tblStoerungen.MaschinenID_F," & _
    19. "tblStoerungen.MStandort " & _
    20. "FROM ((((tblStoerungen LEFT JOIN tblMaschine " & _
    21. "ON tblStoerungen.MaschinenID_F = tblMaschine.MaschineID_P) LEFT JOIN tblArbeitsfolge " & _
    22. "ON tblStoerungen.ArbeitsfolgeID_F = tblArbeitsfolge.ArbeitsfolgeID) LEFT JOIN tblMitarbeiterNamen " & _
    23. "ON tblStoerungen.MitarbeiterID_F = tblMitarbeiterNamen.MitarbeiterID_P) LEFT JOIN tblBereiche " & _
    24. "ON tblStoerungen.BereichID_F = tblBereiche.BereichID_P) LEFT JOIN tblSchichtarten " & _
    25. "ON tblStoerungen.SchichtartID_F = tblSchichtarten.SchichtArtID_P " & _
    26. "WHERE ((tblStoerungen.Stoergrund)<>'Kein Stör-Ereignis') AND ((tblStoerungen.MStandort)=6) " & _
    27. " AND tblStoerungen.StoerDatum Between " & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & _
    28. " And " & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#") & _
    29. "ORDER BY tblStoerungen.StoerDatum DESC;"
    30. ' SQL ausführen
    31. Dim ausfuehren As New OleDb.OleDbCommand(strsql, verbindung)
    32. Dim ds As New DataSet
    33. Dim da As New OleDb.OleDbDataAdapter(ausfuehren)
    34. Dim lvi As ListViewItem
    35. da.Fill(ds)
    36. LVSchichtbuch.Columns.Clear()
    37. LVSchichtbuch.Items.Clear()
    38. LVSchichtbuch.View = View.SmallIcon
    39. LVSchichtbuch.View = View.Details
    40. '#-------------------------------------------------------------------------- Spaltennummer #
    41. LVSchichtbuch.Columns.Add("Nr", 55) 'ID 0
    42. LVSchichtbuch.Columns.Add("Tag", 75) 'Störeintrag 1
    43. LVSchichtbuch.Columns.Add("Maschine", 150) 'Maschine 2
    44. LVSchichtbuch.Columns.Add("Arbeitsfolge", 100) 'Station/Arbeitsfolge 3
    45. LVSchichtbuch.Columns.Add("Minuten", 55) 'Ausfallzeit 5
    46. LVSchichtbuch.Columns.Add("Bereich", 80) 'Mechanik,Elektrik etc 7
    47. LVSchichtbuch.Columns.Add("Schichtart", 85) 'Früh-Spät-Nacht 8
    48. LVSchichtbuch.Columns.Add("Stoergrund", 510) 'Problem/Ausfall/Störung 4
    49. '#----------------------------------------------------------------------------------------- #
    50. With LVSchichtbuch
    51. .Items.Clear()
    52. With ds.Tables(0)
    53. For i As Integer = 0 To .Rows.Count - 1
    54. With .Rows(i)
    55. lvi = LVSchichtbuch.Items.Add(.Item(0), 1)
    56. lvi.SubItems.Add(.Item(1))
    57. lvi.SubItems.Add(.Item(2))
    58. lvi.SubItems.Add(.Item(3))
    59. lvi.SubItems.Add(.Item(5).ToString)
    60. lvi.SubItems.Add(.Item(7).ToString)
    61. lvi.SubItems.Add(.Item(8).ToString)
    62. lvi.SubItems.Add(.Item(4).ToString)
    63. End With
    64. Next
    65. If LVSchichtbuch.Items.Count = 0 Then
    66. Me.TextBox2.Text = "Keine Daten gefunden"
    67. Label3.Text = "..."
    68. Me.lblPfadFertigung.Visible = False
    69. Else
    70. Me.TextBox2.Text = LVSchichtbuch.Items.Count & " Einträge"
    71. Label3.Text = "Ergebnis(IH Schichtbuch)" & " |der letzten >> " & differenz & " | Tage"
    72. End If
    73. ' ---- färbt die Zeilen ein
    74. SetLvwItemBackcolor(LVSchichtbuch, False)
    75. Me.Cursor = Cursors.Default
    76. End With
    77. End With
    78. GesamtSumMinutenSB()
    79. Catch ex As Exception
    80. MsgBox("Es ist ein Fehler aufgetreten!" & vbCrLf & _
    81. ex.Message, MsgBoxStyle.Exclamation)
    82. End Try
    Moin Menorca,

    Deine Daten kommen also aus einer Access Datenbank und Du hast nach der Abfrage ein DataSet - das ist prima.
    Dann kannst meinen Vorschlag ganz einfach umsetzen.

    Hier die Testversionen:

    VB.NET
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Data
    2. Imports System.Windows.Forms
    3. Partial Public Class frmMain
    4. Inherits Form
    5. Private dtStoerungen As DataTable
    6. Private dvStoerungen As DataView
    7. ''' <summary>
    8. ''' Constructor
    9. ''' </summary>
    10. Public Sub New()
    11. InitializeComponent()
    12. ' DataGridView
    13. dgvStoerungen.AutoGenerateColumns = False
    14. dgvStoerungen.ShowCellErrors = False
    15. dgvStoerungen.ShowRowErrors = False
    16. dgvStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    17. dgvStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    18. dgvStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
    19. dgvStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
    20. ' DataTable
    21. dtStoerungen = New DataTable("Schichtbuch")
    22. ' Set DataTable columns
    23. dtStoerungen.Columns.Add("Nr", GetType(Int32)) ' ID
    24. dtStoerungen.Columns.Add("Tag", GetType(DateTime)) ' Störeintrag
    25. dtStoerungen.Columns.Add("Maschine", GetType([String])) ' Maschine
    26. dtStoerungen.Columns.Add("Arbeitsfolge", GetType([String])) ' Station/Arbeitsfolge
    27. dtStoerungen.Columns.Add("Minuten", GetType(Int32)) ' Ausfallzeit
    28. dtStoerungen.Columns.Add("Bereich", GetType([String])) ' Mechanik,Elektrik etc
    29. dtStoerungen.Columns.Add("Schichtart", GetType([String])) ' Früh-Spät-Nacht
    30. dtStoerungen.Columns.Add("Stoergrund", GetType([String])) ' Problem/Ausfall/Störung
    31. ' Bindings
    32. dgvStoerungen.Columns(0).DataPropertyName = "Nr" ' ID
    33. dgvStoerungen.Columns(1).DataPropertyName = "Tag" ' Störeintrag
    34. dgvStoerungen.Columns(2).DataPropertyName = "Maschine" ' Maschine
    35. dgvStoerungen.Columns(3).DataPropertyName = "Arbeitsfolge" ' Station/Arbeitsfolge
    36. dgvStoerungen.Columns(4).DataPropertyName = "Minuten" ' Ausfallzeit
    37. dgvStoerungen.Columns(5).DataPropertyName = "Bereich" ' Mechanik,Elektrik etc
    38. dgvStoerungen.Columns(6).DataPropertyName = "Schichtart" ' Früh-Spät-Nacht
    39. dgvStoerungen.Columns(7).DataPropertyName = "Stoergrund" ' Problem/Ausfall/Störung
    40. ' Set Test-Rows
    41. dtStoerungen.Rows.Add(1, DateTime.Now.AddDays(-9), "Flux Kompensator", "1", 10, "Elektrik", "F", "Fluxiert nicht mehr - Tunneldiode TD1 defekt - gewechselt")
    42. dtStoerungen.Rows.Add(2, DateTime.Now.AddDays(-8), "Brötcheneinkerber", "2", 15, "Mechanik", "F", "Kerbe matchig - Einkerber geschärft")
    43. dtStoerungen.Rows.Add(3, DateTime.Now.AddDays(-7), "Dübeltrockner", "3", 20, "Mechanik", "F", "Dübeltrocken Fluid nachgefüllt")
    44. dtStoerungen.Rows.Add(4, DateTime.Now.AddDays(-6), "Nacktschnecken Pullover Strickmaschine", "4", 25, "Mechanik", "S", "letzte Ölung")
    45. dtStoerungen.Rows.Add(5, DateTime.Now.AddDays(-5), "Kullminator", "5", 30, "Mechanik", "S", "Kullminiert nicht exakt - Kullminum defekt - zentriert")
    46. dtStoerungen.Rows.Add(6, DateTime.Now.AddDays(-4), "Schneehasenfärber", "6", 35, "Spinner", "S", "Färbt Hasen gelb - richtige Farbe eingefüllt!")
    47. dtStoerungen.Rows.Add(7, DateTime.Now.AddDays(-3), "Rühreirührer", "7", 40, "Sklaven", "N", "Eier nachgefüllt und defekten Ei-Sensor getauscht")
    48. dtStoerungen.Rows.Add(8, DateTime.Now.AddDays(-2), "Kaugummientfeuchter", "8", 45, "Mechanik", "N", "getestet - Gummis ein wenig zu trocken - eingestellt")
    49. dtStoerungen.Rows.Add(9, DateTime.Now.AddDays(-1), "Nasenbrecher", "9", 50, "Mechanik", "N", "Nasenzieleinrichtung justiert und getestet")
    50. dtStoerungen.Rows.Add(10, DateTime.Now, "Singlemaltverdünner", "10", 55, "Spinner", "F", "Nee - das macht man nicht")
    51. ' DataView from DataTable
    52. dvStoerungen = New DataView(dtStoerungen)
    53. ' Bind DataView to DataGridView
    54. dgvStoerungen.DataSource = dvStoerungen
    55. End Sub
    56. ''' <summary>
    57. ''' Set filter 1
    58. ''' </summary>
    59. ''' <param name="sender"></param>
    60. ''' <param name="e"></param>
    61. ''' <remarks></remarks>
    62. Private Sub ButtonFilter1_Click(sender As Object, e As EventArgs) Handles ButtonFilter1.Click
    63. Try
    64. dvStoerungen.RowFilter = textBox1.Text
    65. WriteFooter(dtStoerungen, dvStoerungen)
    66. Catch ex As Exception
    67. MessageBox.Show(ex.Message)
    68. End Try
    69. End Sub
    70. ''' <summary>
    71. ''' Set filter 2
    72. ''' </summary>
    73. ''' <param name="sender"></param>
    74. ''' <param name="e"></param>
    75. ''' <remarks></remarks>
    76. Private Sub ButtonFilter2_Click(sender As Object, e As EventArgs) Handles ButtonFilter2.Click
    77. Try
    78. dvStoerungen.RowFilter = textBox2.Text
    79. WriteFooter(dtStoerungen, dvStoerungen)
    80. Catch ex As Exception
    81. MessageBox.Show(ex.Message)
    82. End Try
    83. End Sub
    84. ''' <summary>
    85. ''' Set filter 3
    86. ''' </summary>
    87. ''' <param name="sender"></param>
    88. ''' <param name="e"></param>
    89. ''' <remarks></remarks>
    90. Private Sub ButtonFilter3_Click(sender As Object, e As EventArgs) Handles ButtonFilter3.Click
    91. Try
    92. dvStoerungen.RowFilter = textBox3.Text
    93. WriteFooter(dtStoerungen, dvStoerungen)
    94. Catch ex As Exception
    95. MessageBox.Show(ex.Message)
    96. End Try
    97. End Sub
    98. ''' <summary>
    99. ''' View all DataRows
    100. ''' </summary>
    101. ''' <param name="sender"></param>
    102. ''' <param name="e"></param>
    103. ''' <remarks></remarks>
    104. Private Sub ButtonAllData_Click(sender As Object, e As EventArgs) Handles ButtonAllData.Click
    105. dvStoerungen.RowFilter = String.Empty
    106. labelFooter.Text = String.Empty
    107. End Sub
    108. ''' <summary>
    109. ''' Write Footer
    110. ''' </summary>
    111. ''' <param name="dt"></param>
    112. ''' <param name="dv"></param>
    113. Private Sub WriteFooter(dt As DataTable, dv As DataView)
    114. If dv.Count > 0 Then
    115. labelFooter.Text = dvStoerungen.Count & " Entsprechungen zu Ihrer Suche. Gesamte Störungszeit: " & [String].Format("{0}", dtStoerungen.Compute("Sum(Minuten)", dv.RowFilter)) & " Min."
    116. Else
    117. labelFooter.Text = "Keine Entsprechnungen zu Ihrer Suche."
    118. End If
    119. End Sub
    120. End Class


    C#
    Spoiler anzeigen

    C-Quellcode

    1. using System;
    2. using System.Data;
    3. using System.Windows.Forms;
    4. namespace Schichtbuch
    5. {
    6. public partial class frmMain : Form
    7. {
    8. private DataTable dtStoerungen;
    9. private DataView dvStoerungen;
    10. /// <summary>
    11. /// Constructor
    12. /// </summary>
    13. public frmMain()
    14. {
    15. InitializeComponent();
    16. // DataGridView
    17. dgvStoerungen.AutoGenerateColumns = false;
    18. dgvStoerungen.ShowCellErrors = false;
    19. dgvStoerungen.ShowRowErrors = false;
    20. dgvStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
    21. dgvStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    22. dgvStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
    23. dgvStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
    24. // DataTable
    25. dtStoerungen = new DataTable("Schichtbuch");
    26. // Set DataTable columns
    27. dtStoerungen.Columns.Add("Nr", typeof(Int32)); // ID
    28. dtStoerungen.Columns.Add("Tag", typeof(DateTime)); // Störeintrag
    29. dtStoerungen.Columns.Add("Maschine", typeof(String)); // Maschine
    30. dtStoerungen.Columns.Add("Arbeitsfolge", typeof(String)); // Station/Arbeitsfolge
    31. dtStoerungen.Columns.Add("Minuten", typeof(Int32)); // Ausfallzeit
    32. dtStoerungen.Columns.Add("Bereich", typeof(String)); // Mechanik,Elektrik etc
    33. dtStoerungen.Columns.Add("Schichtart", typeof(String)); // Früh-Spät-Nacht
    34. dtStoerungen.Columns.Add("Stoergrund", typeof(String)); // Problem/Ausfall/Störung
    35. // Bindings
    36. dgvStoerungen.Columns[0].DataPropertyName = "Nr"; // ID
    37. dgvStoerungen.Columns[1].DataPropertyName = "Tag"; // Störeintrag
    38. dgvStoerungen.Columns[2].DataPropertyName = "Maschine"; // Maschine
    39. dgvStoerungen.Columns[3].DataPropertyName = "Arbeitsfolge"; // Station/Arbeitsfolge
    40. dgvStoerungen.Columns[4].DataPropertyName = "Minuten"; // Ausfallzeit
    41. dgvStoerungen.Columns[5].DataPropertyName = "Bereich"; // Mechanik,Elektrik etc
    42. dgvStoerungen.Columns[6].DataPropertyName = "Schichtart"; // Früh-Spät-Nacht
    43. dgvStoerungen.Columns[7].DataPropertyName = "Stoergrund"; // Problem/Ausfall/Störung
    44. // Set Test-Rows
    45. dtStoerungen.Rows.Add(1, DateTime.Now.AddDays(-9), "Flux Kompensator", "1", 10, "Elektrik", "F", "Fluxiert nicht mehr - Tunneldiode TD1 defekt - gewechselt");
    46. dtStoerungen.Rows.Add(2, DateTime.Now.AddDays(-8), "Brötcheneinkerber", "2", 15, "Mechanik", "F", "Kerbe matchig - Einkerber geschärft");
    47. dtStoerungen.Rows.Add(3, DateTime.Now.AddDays(-7), "Dübeltrockner", "3", 20, "Mechanik", "F", "Dübeltrocken Fluid nachgefüllt");
    48. dtStoerungen.Rows.Add(4, DateTime.Now.AddDays(-6), "Nacktschnecken Pullover Strickmaschine", "4", 25, "Mechanik", "S", "letzte Ölung");
    49. dtStoerungen.Rows.Add(5, DateTime.Now.AddDays(-5), "Kullminator", "5", 30, "Mechanik", "S", "Kullminiert nicht exakt - Kullminum defekt - zentriert");
    50. dtStoerungen.Rows.Add(6, DateTime.Now.AddDays(-4), "Schneehasenfärber", "6", 35, "Spinner", "S", "Färbt Hasen gelb - richtige Farbe eingefüllt!");
    51. dtStoerungen.Rows.Add(7, DateTime.Now.AddDays(-3), "Rühreirührer", "7", 40, "Sklaven", "N", "Eier nachgefüllt und defekten Ei-Sensor getauscht");
    52. dtStoerungen.Rows.Add(8, DateTime.Now.AddDays(-2), "Kaugummientfeuchter", "8", 45, "Mechanik", "N", "getestet - Gummis ein wenig zu trocken - eingestellt");
    53. dtStoerungen.Rows.Add(9, DateTime.Now.AddDays(-1), "Nasenbrecher", "9", 50, "Mechanik", "N", "Nasenzieleinrichtung justiert und getestet");
    54. dtStoerungen.Rows.Add(10, DateTime.Now, "Singlemaltverdünner", "10", 55, "Spinner", "F", "Nee - das macht man nicht");
    55. // DataView from DataTable
    56. dvStoerungen = new DataView(dtStoerungen);
    57. // Bind DataView to DataGridView
    58. dgvStoerungen.DataSource = dvStoerungen;
    59. }
    60. /// <summary>
    61. /// Set filter 1
    62. /// </summary>
    63. /// <param name="sender"></param>
    64. /// <param name="e"></param>
    65. private void button1_Click(object sender, EventArgs e)
    66. {
    67. try
    68. {
    69. dvStoerungen.RowFilter = textBox1.Text;
    70. WriteFooter(dtStoerungen, dvStoerungen);
    71. }
    72. catch (Exception ex)
    73. {
    74. MessageBox.Show(ex.Message);
    75. }
    76. }
    77. /// <summary>
    78. /// Set filter 2
    79. /// </summary>
    80. /// <param name="sender"></param>
    81. /// <param name="e"></param>
    82. private void button2_Click(object sender, EventArgs e)
    83. {
    84. try
    85. {
    86. dvStoerungen.RowFilter = textBox2.Text;
    87. WriteFooter(dtStoerungen, dvStoerungen);
    88. }
    89. catch (Exception ex)
    90. {
    91. MessageBox.Show(ex.Message);
    92. }
    93. }
    94. /// <summary>
    95. /// Set filter 3
    96. /// </summary>
    97. /// <param name="sender"></param>
    98. /// <param name="e"></param>
    99. private void button3_Click(object sender, EventArgs e)
    100. {
    101. try
    102. {
    103. dvStoerungen.RowFilter = textBox3.Text;
    104. WriteFooter(dtStoerungen, dvStoerungen);
    105. }
    106. catch (Exception ex)
    107. {
    108. MessageBox.Show(ex.Message);
    109. }
    110. }
    111. /// <summary>
    112. /// View all DataRows
    113. /// </summary>
    114. /// <param name="sender"></param>
    115. /// <param name="e"></param>
    116. private void button4_Click(object sender, EventArgs e)
    117. {
    118. dvStoerungen.RowFilter = string.Empty;
    119. labelFooter.Text = string.Empty;
    120. }
    121. /// <summary>
    122. /// Write Footer
    123. /// </summary>
    124. /// <param name="dt"></param>
    125. /// <param name="dv"></param>
    126. private void WriteFooter(DataTable dt, DataView dv)
    127. {
    128. if (dv.Count > 0)
    129. {
    130. labelFooter.Text = dvStoerungen.Count + " Entsprechungen zu Ihrer Suche. Gesamte Störungszeit: " + String.Format("{0}", dtStoerungen.Compute("Sum(Minuten)", dv.RowFilter)) + " Min.";
    131. }
    132. else
    133. {
    134. labelFooter.Text = "Keine Entsprechnungen zu Ihrer Suche.";
    135. }
    136. }
    137. }
    138. }





    Nimm Dir ein bisschen Zeit, das Prinzip zu verstehen. Auch wenn auf den ersten Blick mehr Code als bei Dir zu sehen ist - dem ist nicht wirklich so.

    Der Rowfilter ist sehr mächtig und meine Beispiele decken nur einen Bruchteil ab - mehr gibt es hier.
    Du kannst also den Filter als String so zusammenbauen, wie Du es brauchst.
    Das Projekt (als VB.NET und C#) hänge ich zum Test hier ran und hoffe, dass die Moderatoren es nicht löschen.

    Wenn Du Fragen hast - immer her damit.

    LG,
    Bruno
    Dateien
    • Schichtbuch.zip

      (179,6 kB, 121 mal heruntergeladen, zuletzt: )
    Super, Spitze damit habe ich ja garnicht gerechnet.

    bekomme jedoch meine Daten nicht vollständig geladen?
    und ich bräuchte unter der ersten dgv eine weitere für die Fertigungsdaten die mit dem gleichen filter gefitert werden soll
    und den Fund Anzahl + Minuten in Summe ausgeibt

    ich hatte meine LV bereits Druckfähig gemacht, nun muss ich die DGV halt drucken

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Constructor
    3. ''' </summary>
    4. Public Sub New()
    5. InitializeComponent()
    6. ' DataGridView
    7. dgvStoerungen.AutoGenerateColumns = False
    8. dgvStoerungen.ShowCellErrors = False
    9. dgvStoerungen.ShowRowErrors = False
    10. dgvStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    11. dgvStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    12. dgvStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
    13. dgvStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
    14. ' DataTable
    15. dtStoerungen = New DataTable("Schichtbuch")
    16. ' Set DataTable columns
    17. dtStoerungen.Columns.Add("Nr", GetType(Int32)) ' ID
    18. dtStoerungen.Columns.Add("Tag", GetType(DateTime)) ' Störeintrag
    19. dtStoerungen.Columns.Add("Maschine", GetType([String])) ' Maschine
    20. dtStoerungen.Columns.Add("Arbeitsfolge", GetType([String])) ' Station/Arbeitsfolge
    21. dtStoerungen.Columns.Add("Minuten", GetType(Int32)) ' Ausfallzeit
    22. dtStoerungen.Columns.Add("Bereich", GetType([String])) ' Mechanik,Elektrik etc
    23. dtStoerungen.Columns.Add("Schichtart", GetType([String])) ' Früh-Spät-Nacht
    24. dtStoerungen.Columns.Add("Stoergrund", GetType([String])) ' Problem/Ausfall/Störung
    25. ' Bindings
    26. dgvStoerungen.Columns(0).DataPropertyName = "Nr" ' ID
    27. dgvStoerungen.Columns(1).DataPropertyName = "Tag" ' Störeintrag
    28. dgvStoerungen.Columns(2).DataPropertyName = "Maschine" ' Maschine
    29. dgvStoerungen.Columns(3).DataPropertyName = "Arbeitsfolge" ' Station/Arbeitsfolge
    30. dgvStoerungen.Columns(4).DataPropertyName = "Minuten" ' Ausfallzeit
    31. dgvStoerungen.Columns(5).DataPropertyName = "Bereich" ' Mechanik,Elektrik etc
    32. dgvStoerungen.Columns(6).DataPropertyName = "Schichtart" ' Früh-Spät-Nacht
    33. dgvStoerungen.Columns(7).DataPropertyName = "Stoergrund" ' Problem/Ausfall/Störung
    34. ' Set Test-Rows
    35. Dim verbindung As OleDb.OleDbConnection = _
    36. New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TPM\TPMDB.mdb")
    37. Dim strsql = "SELECT " & _
    38. "tblFertigung.StörungID_P, " & _
    39. "tblFertigung.StoerDatum, " & _
    40. "tblMaschine.Bezeichnung, " & _
    41. "tblArbeitsfolge.Arbeitsfolge, " & _
    42. "'Problem:|' & [Stoergrund] & '|' & 'Eingriff IH: |' & [BemerkungMaßnahme] AS Meldung, " & _
    43. "tblFertigung.StoerZeitM, " & _
    44. "tblMitarbeiterNamen.Name, " & _
    45. "tblBereiche.Bereich, " & _
    46. "[Schichtart] & ' ( DS ' & [DS] & ')' AS Schicht, " & _
    47. "tblFertigung.MaschinenID_F " & _
    48. "FROM ((((tblFertigung LEFT JOIN tblMaschine " & _
    49. "ON tblFertigung.MaschinenID_F = tblMaschine.MaschineID_P) LEFT JOIN tblArbeitsfolge " & _
    50. "ON tblFertigung.ArbeitsfolgeID_F = tblArbeitsfolge.ArbeitsfolgeID) LEFT JOIN tblMitarbeiterNamen " & _
    51. "ON tblFertigung.MitarbeiterID_F = tblMitarbeiterNamen.MitarbeiterID_P) LEFT JOIN tblBereiche " & _
    52. "ON tblFertigung.BereichID_F = tblBereiche.BereichID_P) LEFT JOIN tblSchichtarten " & _
    53. "ON tblFertigung.SchichtartID_F = tblSchichtarten.SchichtArtID_P "
    54. Dim ausfuehren As New OleDb.OleDbCommand(strsql, verbindung)
    55. Dim ds As New DataSet
    56. Dim da As New OleDb.OleDbDataAdapter(ausfuehren)
    57. da.Fill(dtStoerungen)
    58. ' DataView from DataTable
    59. dvStoerungen = New DataView(dtStoerungen)
    60. ' Bind DataView to DataGridView
    61. dgvStoerungen.DataSource = dvStoerungen
    Bilder
    • Unbenannt.JPG

      71,21 kB, 904×549, 140 mal angesehen
    • Unbenannt.JPG

      76,55 kB, 1.107×286, 115 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „menorca“ () aus folgendem Grund: Fehler gefunden es klappt doch

    menorca schrieb:

    bekomme jedoch meine Daten nicht vollständig geladen?


    Das ist klar, schau Dir mal Deine SELECT Abfrage an - da kommen ja auch andere Felder zurück.
    Die musst Du dem DataGridView ja auch bekannt machen.

    Am schönsten wäre es, wenn Du die .MDB mal rüberreichst, aber die wirst Du wohl nicht rausgeben?

    LG,
    Bruno
    Hallo Bruno,

    hatte ich etwas später bemerkt und als 2 Bild angehängt

    ich habe mir 2 DTP und 2 TB auf die Form gezogen, damit filterer ich zwischen Date1 und Date2
    würde das im RowFilter anders gehen?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub New()
    2. InitializeComponent()
    3. ' DataGridView
    4. dgvStoerungen.AutoGenerateColumns = False
    5. dgvStoerungen.ShowCellErrors = False
    6. dgvStoerungen.ShowRowErrors = False
    7. dgvStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    8. dgvStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    9. dgvStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
    10. dgvStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
    11. ' DataTable
    12. dtStoerungen = New DataTable("Schichtbuch")
    13. ' Set DataTable columns
    14. dtStoerungen.Columns.Add("Nr", GetType(Int32)) ' ID
    15. dtStoerungen.Columns.Add("Tag", GetType(DateTime)) ' Störeintrag
    16. dtStoerungen.Columns.Add("Maschine", GetType([String])) ' Maschine
    17. dtStoerungen.Columns.Add("Arbeitsfolge", GetType([String])) ' Station/Arbeitsfolge
    18. dtStoerungen.Columns.Add("Minuten", GetType(Int32)) ' Ausfallzeit
    19. dtStoerungen.Columns.Add("Bereich", GetType([String])) ' Mechanik,Elektrik etc
    20. dtStoerungen.Columns.Add("Schichtart", GetType([String])) ' Früh-Spät-Nacht
    21. dtStoerungen.Columns.Add("Stoergrund", GetType([String])) ' Problem/Ausfall/Störung
    22. ' Bindings
    23. dgvStoerungen.Columns(0).DataPropertyName = "Nr" ' ID
    24. dgvStoerungen.Columns(1).DataPropertyName = "Tag" ' Störeintrag
    25. dgvStoerungen.Columns(2).DataPropertyName = "Maschine" ' Maschine
    26. dgvStoerungen.Columns(3).DataPropertyName = "Arbeitsfolge" ' Station/Arbeitsfolge
    27. dgvStoerungen.Columns(4).DataPropertyName = "Minuten" ' Ausfallzeit
    28. dgvStoerungen.Columns(5).DataPropertyName = "Bereich" ' Mechanik,Elektrik etc
    29. dgvStoerungen.Columns(6).DataPropertyName = "Schichtart" ' Früh-Spät-Nacht
    30. dgvStoerungen.Columns(7).DataPropertyName = "Meldung" ' Problem/Ausfall/Störung
    31. Dim myDate As String = DTP_Von.Value.ToShortDateString
    32. txtDTP_Von.Text = Now.AddDays(-14).ToShortDateString()
    33. txtDTP_Bis.Text = Now.AddDays(-1).ToShortDateString()
    34. Dim differenz As Long = DateDiff("d", txtDTP_Von.Text, txtDTP_Bis.Text)
    35. ' Set Test-Rows
    36. Dim verbindung As OleDb.OleDbConnection = _
    37. New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TPM\TPMDB.mdb")
    38. ' SQL String generieren
    39. Dim strsql = "SELECT tblStoerungen.StörungID_P AS Nr, " & _
    40. "tblStoerungen.StoerDatum AS Tag, " & _
    41. "tblMaschine.Bezeichnung AS Maschine, " & _
    42. "tblArbeitsfolge.Arbeitsfolge, " & _
    43. "'Problem:|' & [Stoergrund] & '|' & 'Eingriff IH: |' & [BemerkungMaßnahme] AS Meldung, " & _
    44. "tblStoerungen.StoerZeitM AS Minuten, " & _
    45. "tblMitarbeiterNamen.Name, tblBereiche.Bereich, " & _
    46. "tblSchichtarten.Schichtart AS Schichtart, " & _
    47. "tblStoerungen.MaschinenID_F," & _
    48. "tblStoerungen.MStandort " & _
    49. "FROM ((((tblStoerungen LEFT JOIN tblMaschine " & _
    50. "ON tblStoerungen.MaschinenID_F = tblMaschine.MaschineID_P) LEFT JOIN tblArbeitsfolge " & _
    51. "ON tblStoerungen.ArbeitsfolgeID_F = tblArbeitsfolge.ArbeitsfolgeID) LEFT JOIN tblMitarbeiterNamen " & _
    52. "ON tblStoerungen.MitarbeiterID_F = tblMitarbeiterNamen.MitarbeiterID_P) LEFT JOIN tblBereiche " & _
    53. "ON tblStoerungen.BereichID_F = tblBereiche.BereichID_P) LEFT JOIN tblSchichtarten " & _
    54. "ON tblStoerungen.SchichtartID_F = tblSchichtarten.SchichtArtID_P " & _
    55. "WHERE ((tblStoerungen.Stoergrund)<>'Kein Stör-Ereignis') AND ((tblStoerungen.MStandort)=6) " & _
    56. " AND tblStoerungen.StoerDatum Between " & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & _
    57. " And " & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#") & _
    58. "ORDER BY tblStoerungen.StoerDatum DESC;"
    59. Dim ausfuehren As New OleDb.OleDbCommand(strsql, verbindung)
    60. Dim ds As New DataSet
    61. Dim da As New OleDb.OleDbDataAdapter(ausfuehren)
    62. da.Fill(dtStoerungen)
    63. ' DataView from DataTable
    64. dvStoerungen = New DataView(dtStoerungen)
    65. ' Bind DataView to DataGridView
    66. dgvStoerungen.DataSource = dvStoerungen
    67. '---> könnte ich hier eine 2te DGV füllen??
    68. End Sub

    menorca schrieb:

    ich habe mir 2 DTP und 2 TB auf die Form gezogen, damit filterer ich zwischen Date1 und Date2
    würde das im RowFilter anders gehen?


    Ich weiß nicht, ob ich Dich richtig verstehe?
    Du möchtest also eine Zeitspanne im Rowfilter setzen?

    Müsste also im Prinzip so in etwa gehen: "DeinDatumsFeld > #01.01.2014# AND DeinDatumsFeld < #01.02.2014#"
    Meinst Du das?

    Wie gesagt - hier sind alle Möglichkeiten - da kannst Du kombinieren.

    LG,
    Bruno

    Nachtrag: oder vielleicht auch so? Einfach testen: "DeinDatumsFeld > #01.01.2014 00:00:00# AND DeinDatumsFeld < #01.02.2014 00:00:00#"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „diylab“ ()

    Hallo Bruno,

    ich habe es so umgestzt! passt

    VB.NET-Quellcode

    1. dvStoerungen.RowFilter = "Tag >" & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & _
    2. "Tag <" & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#")


    so wie bkommt man da eine zweite DGV gefüllt?

    ich habe es so probiert, doch das haut nicht hin DGV wird nicht gefüllt

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Fertigungsgrid()
    2. InitializeComponent()
    3. ' DataGridView
    4. dgvFStoerungen.AutoGenerateColumns = False
    5. dgvFStoerungen.ShowCellErrors = False
    6. dgvFStoerungen.ShowRowErrors = False
    7. dgvFStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    8. dgvFStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    9. dgvFStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
    10. dgvFStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
    11. ' DataTable
    12. dtStoerungen = New DataTable("Schichtbuch")
    13. ' Set DataTable columns
    14. dtStoerungen.Columns.Add("Nr", GetType(Int32)) ' ID
    15. dtStoerungen.Columns.Add("Tag", GetType(DateTime)) ' Störeintrag
    16. dtStoerungen.Columns.Add("Maschine", GetType([String])) ' Maschine
    17. dtStoerungen.Columns.Add("Arbeitsfolge", GetType([String])) ' Station/Arbeitsfolge
    18. dtStoerungen.Columns.Add("Minuten", GetType(Int32)) ' Ausfallzeit
    19. dtStoerungen.Columns.Add("Bereich", GetType([String])) ' Mechanik,Elektrik etc
    20. dtStoerungen.Columns.Add("Schichtart", GetType([String])) ' Früh-Spät-Nacht
    21. dtStoerungen.Columns.Add("Stoergrund", GetType([String])) ' Problem/Ausfall/Störung
    22. ' Bindings
    23. dgvFStoerungen.Columns(0).DataPropertyName = "Nr" ' ID
    24. dgvFStoerungen.Columns(1).DataPropertyName = "Tag" ' Störeintrag
    25. dgvFStoerungen.Columns(2).DataPropertyName = "Maschine" ' Maschine
    26. dgvFStoerungen.Columns(3).DataPropertyName = "Arbeitsfolge" ' Station/Arbeitsfolge
    27. dgvFStoerungen.Columns(4).DataPropertyName = "Minuten" ' Ausfallzeit
    28. dgvFStoerungen.Columns(5).DataPropertyName = "Bereich" ' Mechanik,Elektrik etc
    29. dgvFStoerungen.Columns(6).DataPropertyName = "Schichtart" ' Früh-Spät-Nacht
    30. dgvFStoerungen.Columns(7).DataPropertyName = "Meldung" ' Problem/Ausfall/Störung
    31. Dim myDate As String = DTP_Von.Value.ToShortDateString
    32. txtDTP_Von.Text = Now.AddDays(-14).ToShortDateString()
    33. txtDTP_Bis.Text = Now.AddDays(-1).ToShortDateString()
    34. Dim differenz As Long = DateDiff("d", txtDTP_Von.Text, txtDTP_Bis.Text)
    35. ' Set Test-Rows
    36. Dim verbindung As OleDb.OleDbConnection = _
    37. New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TPM\TPMDB.mdb")
    38. ' SQL String generieren
    39. Dim strsql = "SELECT " & _
    40. "tblFertigung.StörungID_P AS Nr, " & _
    41. "tblFertigung.StoerDatum AS Tag, " & _
    42. "tblMaschine.Bezeichnung AS Maschine, " & _
    43. "tblArbeitsfolge.Arbeitsfolge, " & _
    44. "'Problem:|' & [Stoergrund] & '|' & 'Eingriff IH: |' & [BemerkungMaßnahme] AS Meldung, " & _
    45. "tblFertigung.StoerZeitM, " & _
    46. "tblMitarbeiterNamen.Name, " & _
    47. "tblBereiche.Bereich, " & _
    48. "tblSchichtarten.Schichtart AS Schichtart, " & _
    49. "tblFertigung.MaschinenID_F " & _
    50. "FROM ((((tblFertigung LEFT JOIN tblMaschine " & _
    51. "ON tblFertigung.MaschinenID_F = tblMaschine.MaschineID_P) LEFT JOIN tblArbeitsfolge " & _
    52. "ON tblFertigung.ArbeitsfolgeID_F = tblArbeitsfolge.ArbeitsfolgeID) LEFT JOIN tblMitarbeiterNamen " & _
    53. "ON tblFertigung.MitarbeiterID_F = tblMitarbeiterNamen.MitarbeiterID_P) LEFT JOIN tblBereiche " & _
    54. "ON tblFertigung.BereichID_F = tblBereiche.BereichID_P) LEFT JOIN tblSchichtarten " & _
    55. "ON tblFertigung.SchichtartID_F = tblSchichtarten.SchichtArtID_P " & _
    56. " WHERE tblFertigung.StoerDatum Between " & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#") & _
    57. "ORDER BY tblFertigung.StoerDatum DESC;"
    58. Dim ausfuehren As New OleDb.OleDbCommand(strsql, verbindung)
    59. Dim ds As New DataSet
    60. Dim da As New OleDb.OleDbDataAdapter(ausfuehren)
    61. da.Fill(dtStoerungen)
    62. ' DataView from DataTable
    63. dvStoerungen = New DataView(dtStoerungen)
    64. ' Bind DataView to DataGridView
    65. dgvFStoerungen.DataSource = dvStoerungen


    du wolltest meine DB, wofür ?
    Bilder
    • dgv+.JPG

      143,09 kB, 892×798, 100 mal angesehen

    menorca schrieb:


    so wie bkommt man da eine zweite DGV gefüllt?
    ich habe es so probiert, doch das haut nicht hin DGV wird nicht gefüllt


    Rufst Du denn überhaupt Deine Sub Fertigungsgrid() irgendwo auf?
    Und InitializeComponent() ist auch nicht nötig.

    Es ist halt nicht ganz einfach über sieben Ecken zu helfen - deswegen wollte ich ursprünglich die DB oder das Projekt.

    LG,
    Bruno
    Hallo Bruno,

    alles Gut hoffe ich. Habe das noch mal korrigiert jetzt läuft es
    ich werde dir die Daten mal aufbereiten und zu senden. Kommt drauf an wie groß es dann wird.

    jetzt muss noch die Drucken DGV rein und die prozentuelle Abweichung wie vorher im ListView ermittelt.
    auch soll da dann mit MSGraph ein Diagramm dazu erstellt werden Auswertung

    hier mal der komplette Code wie er jetzt bei mir aussieht, die Filters habe ich entsprechend angepasst!
    Richtig so?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Data
    2. Imports System.Windows.Forms
    3. Partial Public Class frmMain
    4. Inherits Form
    5. Private dtStoerungen As DataTable
    6. Private dvStoerungen As DataView
    7. Private dtFStoerungen As DataTable
    8. Private dvFStoerungen As DataView
    9. ''' <summary>
    10. ''' Constructor
    11. ''' </summary>
    12. Public Sub New()
    13. InitializeComponent()
    14. ' DataGridView
    15. dgvStoerungen.AutoGenerateColumns = False
    16. dgvStoerungen.ShowCellErrors = False
    17. dgvStoerungen.ShowRowErrors = False
    18. dgvStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    19. dgvStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    20. dgvStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
    21. dgvStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
    22. ' DataTable
    23. dtStoerungen = New DataTable("Schichtbuch")
    24. ' Set DataTable columns
    25. dtStoerungen.Columns.Add("Nr", GetType(Int32)) ' ID
    26. dtStoerungen.Columns.Add("Tag", GetType(DateTime)) ' Störeintrag
    27. dtStoerungen.Columns.Add("Maschine", GetType([String])) ' Maschine
    28. dtStoerungen.Columns.Add("Arbeitsfolge", GetType([String])) ' Station/Arbeitsfolge
    29. dtStoerungen.Columns.Add("Minuten", GetType(Int32)) ' Ausfallzeit
    30. dtStoerungen.Columns.Add("Bereich", GetType([String])) ' Mechanik,Elektrik etc
    31. dtStoerungen.Columns.Add("Schichtart", GetType([String])) ' Früh-Spät-Nacht
    32. dtStoerungen.Columns.Add("Stoergrund", GetType([String])) ' Problem/Ausfall/Störung
    33. ' Bindings
    34. dgvStoerungen.Columns(0).DataPropertyName = "Nr" ' ID
    35. dgvStoerungen.Columns(1).DataPropertyName = "Tag" ' Störeintrag
    36. dgvStoerungen.Columns(2).DataPropertyName = "Maschine" ' Maschine
    37. dgvStoerungen.Columns(3).DataPropertyName = "Arbeitsfolge" ' Station/Arbeitsfolge
    38. dgvStoerungen.Columns(4).DataPropertyName = "Minuten" ' Ausfallzeit
    39. dgvStoerungen.Columns(5).DataPropertyName = "Bereich" ' Mechanik,Elektrik etc
    40. dgvStoerungen.Columns(6).DataPropertyName = "Schichtart" ' Früh-Spät-Nacht
    41. dgvStoerungen.Columns(7).DataPropertyName = "Meldung" ' Problem/Ausfall/Störung
    42. ' Set Test-Rows
    43. Dim verbindung As OleDb.OleDbConnection = _
    44. New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TPM\TPMDB.mdb")
    45. ' SQL String generieren
    46. Dim strsql = "SELECT tblStoerungen.StörungID_P AS Nr, " & _
    47. "tblStoerungen.StoerDatum AS Tag, " & _
    48. "tblMaschine.Bezeichnung AS Maschine, " & _
    49. "tblArbeitsfolge.Arbeitsfolge, " & _
    50. "'Problem:|' & [Stoergrund] & '|' & 'Eingriff IH: |' & [BemerkungMaßnahme] AS Meldung, " & _
    51. "tblStoerungen.StoerZeitM AS Minuten, " & _
    52. "tblMitarbeiterNamen.Name, tblBereiche.Bereich, " & _
    53. "tblSchichtarten.Schichtart AS Schichtart, " & _
    54. "tblStoerungen.MaschinenID_F," & _
    55. "tblStoerungen.MStandort " & _
    56. "FROM ((((tblStoerungen LEFT JOIN tblMaschine " & _
    57. "ON tblStoerungen.MaschinenID_F = tblMaschine.MaschineID_P) LEFT JOIN tblArbeitsfolge " & _
    58. "ON tblStoerungen.ArbeitsfolgeID_F = tblArbeitsfolge.ArbeitsfolgeID) LEFT JOIN tblMitarbeiterNamen " & _
    59. "ON tblStoerungen.MitarbeiterID_F = tblMitarbeiterNamen.MitarbeiterID_P) LEFT JOIN tblBereiche " & _
    60. "ON tblStoerungen.BereichID_F = tblBereiche.BereichID_P) LEFT JOIN tblSchichtarten " & _
    61. "ON tblStoerungen.SchichtartID_F = tblSchichtarten.SchichtArtID_P " & _
    62. "WHERE ((tblStoerungen.Stoergrund)<>'Kein Stör-Ereignis') AND ((tblStoerungen.MStandort)=6) " & _
    63. "ORDER BY tblStoerungen.StoerDatum DESC;"
    64. Dim ausfuehren As New OleDb.OleDbCommand(strsql, verbindung)
    65. Dim ds As New DataSet
    66. Dim da As New OleDb.OleDbDataAdapter(ausfuehren)
    67. da.Fill(dtStoerungen)
    68. ' DataView from DataTable
    69. dvStoerungen = New DataView(dtStoerungen)
    70. ' Bind DataView to DataGridView
    71. dgvStoerungen.DataSource = dvStoerungen
    72. 'Daten Fertigung einbinden
    73. Fertigungsgrid()
    74. End Sub
    75. Public Sub Fertigungsgrid()
    76. Try
    77. ' DataGridView
    78. dgvFStoerungen.AutoGenerateColumns = False
    79. dgvFStoerungen.ShowCellErrors = False
    80. dgvFStoerungen.ShowRowErrors = False
    81. dgvFStoerungen.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    82. dgvFStoerungen.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    83. dgvFStoerungen.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
    84. dgvFStoerungen.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
    85. ' DataTable
    86. dtFStoerungen = New DataTable("Fertigung")
    87. ' Set DataTable columns
    88. dtFStoerungen.Columns.Add("Nr", GetType(Int32)) ' ID
    89. dtFStoerungen.Columns.Add("Tag", GetType(DateTime)) ' Störeintrag
    90. dtFStoerungen.Columns.Add("Maschine", GetType([String])) ' Maschine
    91. dtFStoerungen.Columns.Add("Arbeitsfolge", GetType([String])) ' Station/Arbeitsfolge
    92. dtFStoerungen.Columns.Add("Minuten", GetType(Int32)) ' Ausfallzeit
    93. dtFStoerungen.Columns.Add("Bereich", GetType([String])) ' Mechanik,Elektrik etc
    94. dtFStoerungen.Columns.Add("Schichtart", GetType([String])) ' Früh-Spät-Nacht
    95. dtFStoerungen.Columns.Add("Stoergrund", GetType([String])) ' Problem/Ausfall/Störung
    96. ' Bindings
    97. dgvFStoerungen.Columns(0).DataPropertyName = "Nr" ' ID
    98. dgvFStoerungen.Columns(1).DataPropertyName = "Tag" ' Störeintrag
    99. dgvFStoerungen.Columns(2).DataPropertyName = "Maschine" ' Maschine
    100. dgvFStoerungen.Columns(3).DataPropertyName = "Arbeitsfolge" ' Station/Arbeitsfolge
    101. dgvFStoerungen.Columns(4).DataPropertyName = "Minuten" ' Ausfallzeit
    102. dgvFStoerungen.Columns(5).DataPropertyName = "Bereich" ' Mechanik,Elektrik etc
    103. dgvFStoerungen.Columns(6).DataPropertyName = "Schichtart" ' Früh-Spät-Nacht
    104. dgvFStoerungen.Columns(7).DataPropertyName = "Meldung" ' Problem/Ausfall/Störung
    105. ' Set Test-Rows
    106. Dim verbindung As OleDb.OleDbConnection = _
    107. New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TPM\TPMDB.mdb")
    108. ' SQL String generieren
    109. Dim strsql = "SELECT " & _
    110. "tblFertigung.StörungID_P AS Nr, " & _
    111. "tblFertigung.StoerDatum AS Tag, " & _
    112. "tblMaschine.Bezeichnung AS Maschine, " & _
    113. "tblArbeitsfolge.Arbeitsfolge, " & _
    114. "'Problem:|' & [Stoergrund] & '|' & 'Eingriff IH: |' & [BemerkungMaßnahme] AS Meldung, " & _
    115. "tblFertigung.StoerZeitM AS Minuten, " & _
    116. "tblMitarbeiterNamen.Name, " & _
    117. "tblBereiche.Bereich, " & _
    118. "tblSchichtarten.Schichtart AS Schichtart, " & _
    119. "tblFertigung.MaschinenID_F " & _
    120. "FROM ((((tblFertigung LEFT JOIN tblMaschine " & _
    121. "ON tblFertigung.MaschinenID_F = tblMaschine.MaschineID_P) LEFT JOIN tblArbeitsfolge " & _
    122. "ON tblFertigung.ArbeitsfolgeID_F = tblArbeitsfolge.ArbeitsfolgeID) LEFT JOIN tblMitarbeiterNamen " & _
    123. "ON tblFertigung.MitarbeiterID_F = tblMitarbeiterNamen.MitarbeiterID_P) LEFT JOIN tblBereiche " & _
    124. "ON tblFertigung.BereichID_F = tblBereiche.BereichID_P) LEFT JOIN tblSchichtarten " & _
    125. "ON tblFertigung.SchichtartID_F = tblSchichtarten.SchichtArtID_P " & _
    126. "ORDER BY tblFertigung.StoerDatum DESC;"
    127. Dim ausfuehren As New OleDb.OleDbCommand(strsql, verbindung)
    128. Dim ds As New DataSet
    129. Dim da As New OleDb.OleDbDataAdapter(ausfuehren)
    130. da.Fill(dtFStoerungen)
    131. Catch ex As Exception
    132. MsgBox(ex.Message)
    133. End Try
    134. ' DataView from DataTable
    135. dvFStoerungen = New DataView(dtFStoerungen)
    136. ' Bind DataView to DataGridView
    137. dgvFStoerungen.DataSource = dvFStoerungen
    138. End Sub
    139. ''' <summary>
    140. ''' Set filter 1
    141. ''' </summary>
    142. ''' <param name="sender"></param>
    143. ''' <param name="e"></param>
    144. ''' <remarks></remarks>
    145. Private Sub ButtonFilter1_Click(sender As Object, e As EventArgs) Handles ButtonFilter1.Click
    146. Try
    147. 'Meldung like '%defekt%'
    148. dvStoerungen.RowFilter = "Meldung like '%" & textBox1.Text & "%'"
    149. WriteFooter(dtStoerungen, dvStoerungen)
    150. ' Fertigung Grid
    151. dvFStoerungen.RowFilter = "Meldung like '%" & textBox1.Text & "%'"
    152. WriteFooter(dtFStoerungen, dvFStoerungen)
    153. Catch ex As Exception
    154. MessageBox.Show(ex.Message)
    155. End Try
    156. End Sub
    157. ''' <summary>
    158. ''' Set filter 2
    159. ''' </summary>
    160. ''' <param name="sender"></param>
    161. ''' <param name="e"></param>
    162. ''' <remarks></remarks>
    163. Private Sub ButtonFilter2_Click(sender As Object, e As EventArgs) Handles ButtonFilter2.Click
    164. Try
    165. dvStoerungen.RowFilter = textBox2.Text
    166. WriteFooter(dtStoerungen, dvStoerungen)
    167. ' Fertigung Grid
    168. dvFStoerungen.RowFilter = textBox2.Text
    169. WriteFooter(dtFStoerungen, dvFStoerungen)
    170. Catch ex As Exception
    171. MessageBox.Show(ex.Message)
    172. End Try
    173. End Sub
    174. ''' <summary>
    175. ''' Set filter 3
    176. ''' </summary>
    177. ''' <param name="sender"></param>
    178. ''' <param name="e"></param>
    179. ''' <remarks></remarks>
    180. Private Sub ButtonFilter3_Click(sender As Object, e As EventArgs) Handles ButtonFilter3.Click
    181. Try
    182. dvStoerungen.RowFilter = textBox3.Text
    183. WriteFooter(dtStoerungen, dvStoerungen)
    184. ' Fertigung Grid
    185. dvFStoerungen.RowFilter = textBox3.Text
    186. WriteFooter(dtFStoerungen, dvFStoerungen)
    187. Catch ex As Exception
    188. MessageBox.Show(ex.Message)
    189. End Try
    190. End Sub
    191. ''' <summary>
    192. ''' Set filter 4
    193. ''' </summary>
    194. ''' <param name="sender"></param>
    195. ''' <param name="e"></param>
    196. ''' <remarks></remarks>
    197. Private Sub ButtonFilter4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFilter4.Click
    198. '"DeinDatumsFeld > #01.01.2014# AND DeinDatumsFeld < #01.02.2014#"
    199. 'Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#")
    200. Try
    201. dvStoerungen.RowFilter = "Tag >" & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & _
    202. "Tag <" & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#")
    203. WriteFooter(dtStoerungen, dvStoerungen)
    204. ' Fertigung Grid
    205. dvFStoerungen.RowFilter = "Tag >" & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & _
    206. "Tag <" & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#")
    207. WriteFooter(dtFStoerungen, dvFStoerungen)
    208. Catch ex As Exception
    209. MessageBox.Show(ex.Message)
    210. End Try
    211. End Sub
    212. ''' <summary>
    213. ''' View all DataRows
    214. ''' </summary>
    215. ''' <param name="sender"></param>
    216. ''' <param name="e"></param>
    217. ''' <remarks></remarks>
    218. Private Sub ButtonAllData_Click(sender As Object, e As EventArgs) Handles ButtonAllData.Click
    219. dvStoerungen.RowFilter = String.Empty
    220. labelFooter.Text = String.Empty
    221. ''
    222. dvFStoerungen.RowFilter = String.Empty
    223. lblFertigung.Text = String.Empty
    224. End Sub
    225. ''' <summary>
    226. ''' Write Footer
    227. ''' </summary>
    228. ''' <param name="dt"></param>
    229. ''' <param name="dv"></param>
    230. Private Sub WriteFooter(dt As DataTable, dv As DataView)
    231. If dv.Count > 0 Then
    232. labelFooter.Text = "IH: " & dvStoerungen.Count & " Entsprechungen zu Ihrer Suche. Gesamte Störungszeit: " & [String].Format("{0}", dtStoerungen.Compute("Sum(Minuten)", dv.RowFilter)) & " Min."
    233. lblFertigung.Text = "AF: " & dvFStoerungen.Count & " Entsprechungen zu Ihrer Suche. Gesamte Störungszeit: " & [String].Format("{0}", dtFStoerungen.Compute("Sum(Minuten)", dv.RowFilter)) & " Min."
    234. Else
    235. labelFooter.Text = "SB, Keine Entsprechnungen zu Ihrer Suche."
    236. lblFertigung.Text = "AF, Keine Entsprechnungen zu Ihrer Suche."
    237. End If
    238. End Sub
    239. ' Ereignis DateTimePicker Von
    240. Private Sub DTP_Von_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DTP_Von.ValueChanged
    241. Me.txtDTP_Von.Text = DTP_Von.Value.ToShortDateString
    242. End Sub
    243. ' Ereignis DateTimePicker Bis
    244. Private Sub DTP_Bis_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DTP_Bis.ValueChanged
    245. Me.txtDTP_Bis.Text = DTP_Bis.Value.ToShortDateString
    246. End Sub
    247. '//
    248. Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    249. Dim myDate As String = DTP_Von.Value.ToShortDateString
    250. txtDTP_Von.Text = Now.AddDays(-14).ToShortDateString()
    251. txtDTP_Bis.Text = Now.AddDays(-1).ToShortDateString()
    252. Dim differenz As Long = DateDiff("d", txtDTP_Von.Text, txtDTP_Bis.Text)
    253. dvStoerungen.RowFilter = "Tag >" & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & _
    254. "Tag <" & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#")
    255. ' --->
    256. dvFStoerungen.RowFilter = "Tag >" & Format$(CDate(txtDTP_Von.Text), "\#MM\/dd\/yyyy\#") & " And " & _
    257. "Tag <" & Format$(CDate(txtDTP_Bis.Text), "\#MM\/dd\/yyyy\#")
    258. End Sub
    259. ':::
    260. End Class
    Bilder
    • dgv++.JPG

      207,35 kB, 972×755, 115 mal angesehen
    Hallo Bruno,

    mittlerweile habe ich das Auswerten (Abweichung in %) wieder drin. Super deine Hilfe bis hier her ohne dein Beispiel wäre ich jetzt nicht soweit.
    nun hatte ich mit der LV auch ein drucken der Liste ermöglicht. Beim DGV habe ich noch hier und da ein kleines Problem
    wo ich Hilfe gebrauchen könnte.
    im Prinzip funktioniert mein Code, doch wird der Text in der letzten Spalte nicht im Zeilenumbruch dargestellt.
    beim ersten Aufruf wird die Kopfzeile angezeigt, dann im 2 Aufruf wieder nicht (1 Seite) die folge Seiten jedoch ja.

    habe Bildmaterial als rar Datei angehängt

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Static PrintChart As Boolean = True
    2. Static Allpages As Integer = 1
    3. Static CurrenctPage As Integer = 1
    4. Dim strDokumentname As String = "Auswertung: | " & txtDTP_Von.Text & " - " & txtDTP_Bis.Text & " | " & lblDifferenz.Text
    5. Dim strTitel As String = "Stoerdaten Instandhaltung: | " & txtDTP_Von.Text & " - " & txtDTP_Bis.Text & " | "
    6. Dim myDatum As String = "Daten Abruf: " & Format(Now, "dd.MM.yyyy HH:mm:ss")
    7. Dim strErsteller As String = "Erstellt mit TPMSBSLS"
    8. 'Image einbinden aufs Dokument
    9. Dim newImage As Image = My.Resources.Instandhaltung
    10. Dim max_Y As Integer = dgvStoerungen.Rows.Count - 1
    11. Dim y As Single
    12. If PrintChart Then
    13. 'Liste Starthöhe mit Chart Seite 1 ------>
    14. y = newImage.Height + 20
    15. With e.Graphics
    16. .DrawImage(newImage, 12, 10)
    17. .DrawString(strTitel, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    18. New Point(newImage.Width + 10, newImage.Height - 10))
    19. .DrawString(myDatum, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    20. New Point(30, PD.DefaultPageSettings.Bounds.Height - 70))
    21. .DrawString(strErsteller, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    22. New Point(30, PD.DefaultPageSettings.Bounds.Height - 40))
    23. .DrawString(strDokumentname, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    24. New Point(300, PD.DefaultPageSettings.Bounds.Height - 70))
    25. End With
    26. Else
    27. 'Liste Starthöhe ohne Chart ab Seite 2 ----->
    28. y = 30
    29. With e.Graphics
    30. .DrawString(myDatum, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    31. New Point(30, PD.DefaultPageSettings.Bounds.Height - 70))
    32. .DrawString(strErsteller, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    33. New Point(30, PD.DefaultPageSettings.Bounds.Height - 40))
    34. .DrawString(strDokumentname, New Font("Times New Roman", 10, FontStyle.Regular), Brushes.Blue, _
    35. New Point(300, PD.DefaultPageSettings.Bounds.Height - 70))
    36. End With
    37. End If
    38. '-------------------------
    39. 'Datagridview print ------
    40. '-------------------------
    41. With dgvStoerungen
    42. Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
    43. fmt.LineAlignment = StringAlignment.Center
    44. fmt.Trimming = StringTrimming.EllipsisCharacter
    45. Do While mRow < .RowCount
    46. Dim row As DataGridViewRow = .Rows(mRow)
    47. Dim x As Single = 30 'e.MarginBounds.Left
    48. Dim h As Single = 15
    49. 'Allpages += 1
    50. For Each cell As DataGridViewCell In row.Cells
    51. Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
    52. If mRow Mod 2 = 0 Then
    53. e.Graphics.FillRectangle(New SolidBrush(RowColor), rc)
    54. Else
    55. e.Graphics.FillRectangle(New SolidBrush(RowColorAlternate), rc)
    56. End If
    57. e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
    58. '----->
    59. If (newpage) Then
    60. e.Graphics.FillRectangle(New SolidBrush(HeaderColor), rc)
    61. e.Graphics.DrawString(dgvStoerungen.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Blue, rc, fmt)
    62. Else
    63. e.Graphics.DrawString(dgvStoerungen.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Black, rc, fmt)
    64. End If
    65. If cell.ColumnIndex = 1 Or cell.ColumnIndex = 4 Or cell.ColumnIndex = 6 Then
    66. fmt.Alignment = StringAlignment.Center
    67. Else
    68. fmt.Alignment = StringAlignment.Near
    69. End If
    70. x += rc.Width
    71. h = Math.Max(h, rc.Height)
    72. Next
    73. newpage = False
    74. y += h
    75. mRow += 1
    76. If y + h > e.MarginBounds.Bottom Then
    77. e.Graphics.DrawString("Seite " & CurrenctPage.ToString, _
    78. New Font("Times New Roman", 12), Brushes.Blue, New Point(300, PD.DefaultPageSettings.Bounds.Height - 40))
    79. CurrenctPage += 1
    80. e.HasMorePages = True
    81. PrintChart = False
    82. mRow -= 1
    83. newpage = True
    84. Exit Sub
    85. End If
    86. Loop
    87. mRow = 0
    88. End With
    89. '& "/" & Allpages.ToString
    90. e.Graphics.DrawString("Seite " & CurrenctPage.ToString, _
    91. New Font("Times New Roman", 12), Brushes.Blue, New Point(300, PD.DefaultPageSettings.Bounds.Height - 40))
    92. PrintChart = True
    93. CurrenctPage = 1
    94. Allpages = 1
    Dateien
    • Report.rar

      (328,68 kB, 78 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „menorca“ ()

    Hi menorca,

    ich glaube, da kann ich Dir nicht direkt helfen - sorry.

    Zumal ich nicht auf die Idee kommen würde, ein DataGridView direkt auszulesen und zum Bild zu verarbeiten 8-) .
    Du hast doch das Prinzip schon verstanden gehabt und nun benutzt Du wieder das DGV als Datenquelle - warum?

    Dir stehen doch DataSets / Tables und natürlich die SICHT auf die Daten als DataView schon zur Verfügung!
    Also werte die Daten dieser Quellen aus - in Deinem Fall die Ergebnisse Deiner Suche als DataView.

    Und dann hast Du alle Wege frei für Deine Druckausgaben.
    Z.B. als Report. Wie wäre es mit CrystalReport (ist doch glaube ich beim Studio dabei?).
    Den Report schön zusammen-klicken und das DataView als Datenquelle dranhängen - fertig.
    Oder eben einen anderen Reportgenerator oder eine passende Komponente oder irgendwas schickes von CodeProject.

    Wenn ich auf Arbeit irgendetwas Drucken oder Visualisieren möchte, nehme ich die perfekten Komponenten von ASPOSE.NET, aber das kommt bestimmt bei Dir nicht in Frage.
    Nutzt man es aber ständig so wie wir, amortisiert sich der Preis in Windeseile.
    Oder Du nimmst Dir die Trialversionen von Aspose, machst Dein Projekt fertig und Deine Firma wird sich die Finger lecken und das Vollprodukt kaufen :P ..

    LG,
    Bruno