Visual Basic mit Zeilen aus Tabelle rechnen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Visual Basic mit Zeilen aus Tabelle rechnen

    Guten Tag,
    ich benutze Visual Studio 2017 und derzeit Programmiere ich ein kleines Programm, welche eine Datenbank (mds.) einliest und nun soll mit den Werten weiter gerechnet werden.
    das Visual Basic Programm zieht sich den Datensatz in den Datagridview1 rein. Also besteht schon mal eine Verbindung zwischen Programm und Tabelle.

    Jetzt möchte ich mit diesen Tabellenwerten rechnen, jedoch nichts hinzufügen oder ersetzen. Es sollen die Werte wie in Excel berechnet werden, z.B. Zelle A2*E2 oder
    Summe( A2:A10). Zum Schluss sollen die berechneten Werte in einer Textbox oder in einem Label ausgegeben werden.

    Wie gehe ich am besten ran, am besten mit einem kleinen Beispiel.
    Danke vorrab und viele Grüße

    sav94 schrieb:

    ​Wie realisier ich das CellValueChanged Event​?
    Das machst Du im Designer.
    Klick links auf das DGV, rechts dann auf Eigenschaften (unten) und Ereignisse (oben) und doppelklickst auf CellValueChanged.
    Die Zelle wird Dir in den EventArgs mitgegeben:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
    2. Label1.Text = String.Format("Col = {0}, Row = {1}", e.ColumnIndex, e.RowIndex)
    3. End Sub
    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!
    Danke, aber leider hilft mir das nicht weiter.
    Ich hänge meine Accesstabelle als Url an.

    ibb.co/k9G019

    Die Tabelle ist als New Datatable angelegt worden.
    Wie schaffe ich jetzt die summe der Preise aller Zeilen zu addieren und mir den wert in der Textbox ausgeben zu lassen?
    und wie kann ich die Uhrzeit minus die Uhrzeit_2


    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Try
    3. Dim MyConnection As System.Data.OleDb.OleDbConnection
    4. Dim dataSet As System.Data.DataSet
    5. Dim MyCommand As System.Data.OleDb.OleDbCommand
    6. Dim cmd As New OleDbCommand
    7. Dim path As String = OpenFileDialog1.FileName
    8. MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Persist Security Info=False")
    9. MyCommand = New System.Data.OleDb.OleDbCommand("select * from [Production]", MyConnection)
    10. dataSet = New System.Data.DataSet
    11. MyConnection.Open()
    12. Dim myDatareader As OleDbDataReader = MyCommand.ExecuteReader()
    13. Dim myDatatable As New DataTable
    14. myDatatable.Load(myDatareader, LoadOption.PreserveChanges)
    15. DataGridView1.DataSource = myDatatable
    16. MyConnection.Close()

    sav94 schrieb:

    VB.NET-Quellcode

    1. Dim myDatatable As New DataTable
    Pack diese Zeile aus der Prozedur in die Klasse, besser die Deklaration (ohne New) in die Klasse, die Instanziierung (ohne Dim) in der Prozedur lassen.
    Dann kannst Du von überall aus auf die Tabelle zugreifen, insbesondere kannst Du die Zeilen einer beliebigen Spalte addieren.
    Die Differenz zweier Uhrzeiten berechnest Du so:

    VB.NET-Quellcode

    1. Dim diff As TimeSpan = DateTime2 - DateTime1
    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!
    @sav94 mal Q&D:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private table As DataTable
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. table = New DataTable("bla")
    5. table.Columns.Add("s1", GetType(Integer))
    6. table.Columns.Add("s2", GetType(Integer))
    7. For i = 0 To 10
    8. Dim row = table.NewRow()
    9. row(0) = 42 + i
    10. table.Rows.Add(row)
    11. Next
    12. Me.DataGridView1.DataSource = table
    13. End Sub
    14. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    15. For i = 1 To 10
    16. Dim sum = 0
    17. For j = 0 To i
    18. sum += CInt(table.Rows(j).Item(0))
    19. Next
    20. table.Rows(i).Item(1) = sum
    21. Next
    22. End Sub
    23. End Class
    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!

    sav94 schrieb:

    ich möchte keine neuen Einträge hinzufügen, sondern aus meiner bestehenden Tabelle Werte auslesen.
    Exakt dies tut Button1_Click(...) in meinem Beispiel.
    Hätte ich den Code für das Befüllen der Tabelle in Form1_Load(...) weggelassen, hättest Du Dich über eine Null-Pointer-Exception beschwert.
    Du bekommst hier nicht Deine fertige Lösung geschenkt, sondern Du bekommst einen möglichen Lösungsweg, den Du natürlich auf Dein Problem anwenden musst.
    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!