DataGridView als Mail versenden, aber nur den aktuellen Monat!

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von carwashbuxtehude.

    DataGridView als Mail versenden, aber nur den aktuellen Monat!

    Hi!

    Das versenden vom ganzen Inhalt funktioniert.
    Was muss ich anstellen, das nur der Inhalt des aktuellen Monats gesendet wird???


    VB.NET-Quellcode

    1. Try
    2. Msg.IsBodyHtml = True ' Im HTML-Format erstellen
    3. Msg.From = New MailAddress("info@.........de") ' Von
    4. Msg.To.Add("info@...................de") ' An
    5. Msg.Subject = "Test am: " & Date.Now.ToString ' Betreff
    6. ' Aus den DataGridView-Zeilen und Spalten eine HTML-Tabelle erstellen
    7. Msg.Body = TabelleStart & vbCrLf
    8. Zeile = "<TR>"
    9. For Each S As DataGridViewColumn In DataGridView1.Columns ' Die Spaltenüberschriften auslesen
    10. Zeile = Zeile & "<TH>" & S.HeaderText & "</TH>"
    11. Next
    12. Zeile = Zeile & "</TR>" & vbCrLf
    13. Msg.Body = Msg.Body & Zeile
    14. For Each Z As DataGridViewRow In DataGridView1.Rows ' Für jede Zeile ...
    15. Zeile = "<TR>"
    16. For I As Integer = 0 To DataGridView1.ColumnCount - 1 ' ... die einzelnen Felder auslesen
    17. Zeile = Zeile & ZelleStart & Z.Cells(I).Value & ZelleEnde
    18. Next
    19. Zeile = Zeile & "</TR>" & vbCrLf
    20. Msg.Body = Msg.Body & Zeile
    21. Next
    22. Msg.Body = Msg.Body & TabelleEnde
    23. 'MessageBox.Show(Msg.Body, Date.Now.ToString)
    24. PostausgangsServer.Send(Msg) ' Nachricht verschicken
    25. MessageBox.Show("E-Mail erfolgreich versandt.", "Information", _
    26. MessageBoxButtons.OK, MessageBoxIcon.Information)
    27. Catch ex As Exception
    28. MessageBox.Show(Err.Number & ex.Message & ex.StackTrace.ToString) ' Falls ein Fehler auftritt
    29. End Try





    danke schon mal für die Hilfe..

    carwashbuxtehude schrieb:

    Was muss ich anstellen
    Zunächst mal sagen, was sonst noch so drin steht, dann die erste und die letzte Zeile des aktuellen Monats finden (falls die zusammenstehen) und alle Zeilen
    oder
    jede Zeile des aktuellen Monats einzeln (falls die gemixt sind)
    an die Ausgabe dranhängen. Feddich. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hab versucht das DGV gleich zu filtern, bekomme beim ausführen des Filters immer die Meldung:

    Evaluate Exeption wurde nicht behandelt???

    Was muß ich tun, damit der Filter ausgeführt wird???

    So wird es gefüllt und funktioniert auch ohne Filter

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. TextBox1.Text = Format(Now, "d")
    3. Conn = New OleDbConnection
    4. Conn.ConnectionString = String.Concat(PROVIDER, DBPFAD, DBNAME)
    5. ds_Datum = New DataSet()
    6. dt_Datum = New DataTable("Datum")
    7. ds_Datum.Tables.Add(dt_Datum)
    8. da = New OleDbDataAdapter("", Conn)
    9. da.SelectCommand.CommandText = "SELECT Datum, Bearbeiter, Waschzahlen, Umsatzgesamt FROM Umsatzdaten11"
    10. da.SelectCommand.CommandType = CommandType.Text
    11. da.Fill(dt_Datum)
    12. dv = New DataView(ds_Datum.Tables("Datum"))
    13. DataGridView1.DataSource = dv
    14. Try
    15. TextBox1.Text = Format(Now, "d")
    16. 'filtern()
    17. Catch ex As Exception
    18. End Try
    19. End Sub




    So rufe ich den Filter auf und bekomme beim aufrufen die besagte Meldung!

    VB.NET-Quellcode

    1. dv.RowFilter = "Datum LIKE '" & TextBox1.Text _
    2. & "*' AND Bearbeiter LIKE '" & TextBox2.Text & "*'"



    Matthias
    Bilder
    • Bild1.JPG

      69,19 kB, 886×605, 182 mal angesehen
    Gute Frage!!
    Vielleicht habe ich auch nur wieder falsch gedacht. den Bearbeiter brauch ich im Filter gar nicht.
    Im DGV soll immer nur die Daten vom aktuellen Monat angezeigt werden.
    Also eine Combobox mit den Monaten von Januar bis Dezember falls man etwas in der Vergangenheit nachschauen will und Default immer auf den aktuellen Monat.

    Kleinen Tipp für mich?
    Matthias
    immerhin ist ein lauffähiges Codebeispiel dabei, bei dem auf Zeitwerte gefiltert wird.
    Das würde ich an deiner Stelle mir mal angugge tatsächlich versuchen zu verstehen.

    Man kann ja auch nachfragen...

    Edit: Ups - sry: das Sample mit ZeitFilter ist in Daten laden, speichern, verarbeiten, im DatasetOnly-Projekt.

    Es ist vom Prinzip her auch ganz simpel:

    VB.NET-Quellcode

    1. myBindingSource.Filter = "DatumSpalte > #9/11/2001# and DatumSpalte < #9/12/2001# "
    ergibt alle Datensätze von diesem Tag.

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

    Habe einmal ein wenig ausprobiert.
    setze ich den Filter auf "Bearbeiter" geht es.
    Setze ich ihn auf "Datum", dann geht er nicht und schmeißt eine Meldung.
    EvaluateExeption wurde nicht behandelt

    Kann es der Grund vom Datumsformat sein.

    in die TextBox schreibe ich 07.02.2014

    in der Access Datenbank ist das Feld Datum als Felddatentyp Datum/Uhrzeit eingetragen.


    Mache ich etwas mit dem Datumsformat falsch???
    So lese ich Daten in DGV ein.

    VB.NET-Quellcode

    1. Private Sub Anzeige() 'Was im DataGridView1 angezeigt werden soll
    2. Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Umsatzdaten11.accdb")
    3. Dim cmdStr As String = "SELECT Datum,Bearbeiter,Waschzahlen,Umsatzgesamt,Aufbereitung,Anhaenger,Festangestellte, Aushilfen,Stillstand,Barausgabe,BarAushilfen FROM Umsatzdaten11"
    4. Dim cmd As New OleDbCommand(cmdStr, conn)
    5. Dim da As New OleDbDataAdapter(cmd)
    6. Dim ds As New DataSet()
    7. conn.Open()
    8. da.Fill(ds, "Umsatzdaten11")
    9. conn.Close()
    10. DataGridView2.DataSource = ds
    11. DataGridView2.DataMember = "Umsatzdaten11"
    12. Dim summe As Decimal = 0
    13. End Sub




    Jetzt muß ich doch noch eine BindingSource erstellen?
    naja - der ganze Ansatz ist nix, was ich unterstützen würde.
    Eine DB-Anwendung sollte nur ein einziges Dataset haben, und zwar ein typisiertes Dataset, und das sollte im Designer bereits aufs Form gepackt sein, und die DGVs sollten ebenfalls bereits im Designer dran angebunden sein.

    bei dir wird bei jeder Anzeige() ein neues Dataset erstellt, und zwar ein untypisiertes. Das ist keine Basis für eine Datenverarbeitung.