Datagrid ValidateRecords

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Datagrid ValidateRecords

    Hallo,

    ich hänge hier in einem fremden Code zum Lernen. Hier wird ein DatagridView für eine Datenbank angelegt. Sieht alles relativ simpel aus, aber die beiden AddHandler-Anweisungen verstehe ich nicht. "ValidateRecords" finde ich gar nicht im Internet nur "ValidateRecord". Ist das veraltet? Der Code ist schon was älter.

    Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim myconn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=abc.mdb;")
    3. Dim da As New OleDbDataAdapter("SELECT neu, alt, Breite, Hoehe, Tiefe FROM tbl order by neu", myconn)
    4. Dim ds As DataSet
    5. ds = New DataSet()
    6. da.Fill(ds, "tbl")
    7. DataGridView1.DataSource = ds
    8. DataGridView1.DataMember = "tbl"
    9. AddHandler btnNext.Click, AddressOf Me.ValidateRecords ???
    10. AddHandler btnPrevious.Click, AddressOf Me.ValidateRecords???
    11. ValidateRecords(Me, e)???
    12. btn_refresh.PerformClick()


    Viele Grüße
    Nein, das sind Namen von Prozeduren, die Du selber anlegen musst. VS hilft Dir aber dabei:

    Allerdings ist es meist sinnvoller, die EventHandler klassissch anzulegen. Also nicht mit AddHandler zu arbeiten, sondern mit der Handles-Klausel und so die Events mit den EventHandlern quasi fest zu verdrahten.* AddHandler nimmt man für dynamische Verbindung zwischen Control-Event und Prozedur. Entweder, weil man zur Laufzeit was ändern will oder weil man mit Controls zu tun hat, die zur Programmierzeit noch nicht existieren oder festgelegt wurden. Also bei Deinem Beispiel überhaupt nicht nötig.

    * Festverdrahtung mittels Handles

    VB.NET-Quellcode

    1. Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. End Sub
    3. Private Sub ValidateRecords(sender As Object, e As EventArgs) Handles btnNext.Click, btnPrevious.Click
    4. 'sonstewas für Validierungscode
    5. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja, richtig. Ich würd das aber etwas anders gestalten:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim myconn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=abc.mdb;")
    3. Dim da As New OleDbDataAdapter("SELECT neu, alt, Breite, Hoehe, Tiefe FROM tbl order by neu", myconn)
    4. Dim ds As DataSet
    5. ds = New DataSet()
    6. da.Fill(ds, "tbl")
    7. DataGridView1.DataSource = ds
    8. DataGridView1.DataMember = "tbl"
    9. 'keine Änderung von obigen Code (denn den hab ich mir nicht mal angesehen); ab hier aber anders:
    10. ValidateRecords()
    11. End Sub
    12. Private Sub ValidateRecords(sender As Object, e As EventArgs) Handles btnNext.Click, btnPrevious.Click
    13. ValidateRecords() 'also die untere Sub aufrufen
    14. End Sub
    15. Private Sub ValidateRecords()
    16. 'sonstewas für Validierungscode
    17. End Sub

    So muss man weder sich quasi mit sender und EventArgs rumschlagen, noch mit PerformClick arbeiten. Sondern man ruft einfach nur die echte Validierungssub auf. Direkt durch Zeile#11 oder eben indirekt durch die Button-Clicks, auf die der EventHandler in Z#14 reagiert und dann selber die Sub aufruft.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.