typeof einer Datagridview-Zelle

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    typeof einer Datagridview-Zelle

    Guten Tag!
    Ich habe auf einer Form mehrere Texboxes, eine Combobox und ein Datagridview (DG mit Namen: DGName).
    Ich möchte nun je nach dem in welchem Feld ich einen Buchstaben eingebe, verschiedene Subs aufrufen. Bei Textbox und Combobox gelingt das sehr gut, aber für das Datagridview fehlt mir der richtige Typ für das Directcast (siehe ???? im Code). "Datagridview" ergibt zwar keinen Fehler, aber zeigt auch keine Wirkung.

    VB.NET-Quellcode

    1. Private Sub TB_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles _
    2. TB1.KeyPress, TB2.KeyPress, CB1.KeyPress, TB3.KeyPress, DG.KeyPress
    3. Dim Name As String = "..."
    4. If TypeOf (sender) Is TextBox Then
    5. Dim sdr = DirectCast(sender, TextBox)
    6. Name = sdr.Name
    7. ElseIf TypeOf (sender) Is ComboBox Then
    8. Dim sdr = DirectCast(sender, ComboBox)
    9. Name = sdr.Name
    10. ElseIf TypeOf (sender) Is DataGridView Then ' Datagridview ????
    11. Dim sdr = DirectCast(sender, DataGridView)
    12. Name = sdr.Name
    13. End If
    14. Select Case Name
    15. Case "TB1"
    16. IntzahlTextbox(sender, e)
    17. Case "TB2"
    18. DblzahlTextbox(sender, e)
    19. Case "TB3"
    20. Datum(sender, e)
    21. Case "DGName"
    22. Label1.Text = Name
    23. Case "CB1"
    24. Datum(sender, e)
    25. ' IntzahlCombobox(sender, e)
    26. End Select
    27. End Sub


    Wer kann mir bitte weiterhelfen?
    Herzlichen Dank!
    Schöne Grüße
    el

    VB-and-Me schrieb:

    Wer kann mir bitte weiterhelfen?
    Kommt das Programm bei einem DGV überhaupt da vorbei?
    Ich denke Nein.
    Wenn Ja:
    Haltepunkt drauf setzen, auf sender klicke und Shift+F9 drücken.
    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!
    prinzipiell geht das auch einfacher:

    VB.NET-Quellcode

    1. Private Sub TB_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles _
    2. TB1.KeyPress, TB2.KeyPress, CB1.KeyPress, TB3.KeyPress, DG.KeyPress
    3. Select Case True
    4. Case sender Is TB1
    5. IntzahlTextbox(sender, e)
    6. Case sender Is TB2
    7. DblzahlTextbox(sender, e)
    8. Case sender Is TB3
    9. Datum(sender, e)
    10. Case sender Is CB1
    11. Datum(sender, e)
    12. ' IntzahlCombobox(sender, e)
    13. Case sender Is DG
    14. Label1.Text = "DGName"
    15. Case Else: Throw new Exception("Unknown Event-Sender!")
    16. End Select
    17. End Sub

    ABer wie Rod sagt: Kann gut sein, dass DGV kein KeyPress-Event empfängt.
    Weil eine DGVTextbox-Column hostet ja eine kleine Textbox, wenn man in eine Zelle reinschreibt.
    Da gehen die Tastendrücke glaub garnet ans DGV.

    ErfinderDesRades schrieb:

    Kann gut sein, dass DGV kein KeyPress-Event empfängt.
    Habs ausprobiert, es ist so: Es kommt nix an.
    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!
    Vielen Dank an beide!

    Ja, ich hatte das Gridview versehentlich einmal mit DG und einmal mit DGName angesprochen.
    Nach Korrektur stelle ich fest, das ein keypressed-Ereignis auf das leere Gridview-Feld außerhalb der Zeilen sehrwohl zustande kommt, aber nicht, wenn man in die Zellen etwas hineinschreibt. Das deckt sich mit euren Aussagen.

    Ich wollte ja durch dieses keypressed-Ereignis bestimmte Buchstaben bei der Eingabe ausschließen. Dazu fällt mir nun ein, die Eingabe insgesamt im Rahmen eines cellleave-Ereignisses auf Richtigkeit überprüfen zu lassen. Wäre das o.k., oder gibt es andere Möglichkeiten im Datagridview?
    el
    Richtig fein ists, wenn man die Validierung in den Daten-Layer verlegt oderso.
    guggemol IDataErrorInfo

    ("oderso", weil ich nicht weiß, ob das der Daten-Layer oder der Business-Layer ist oder was)
    Jedenfalls ganz weg vom Gui die Datensätze wissen selbst, ob sie gültig sind oder nicht.