DataGridView CheckBox immer False?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    @ErfinderDesRades
    .EndEdit()- "Führt den Bearbeitungsvorgang an der aktiven Zelle aus und beendet ihn"
    Ziemlich genial.. Auf die Idee hätte ich beim suchen kommen sollen. Habe zwar das DropDownMenu (nach einem ".") durchsucht aber nach anderen Wörtern gesucht :D

    Ja, eben dass dachte ich mir auch. Der User geht ja schon explizit auf die CheckBox und setzt den Erledigt-Haken. Dann muss es ja auch so gewollt sein.
    Und schwupps ist die Zeile "weg" und man kann sich auf die wesentliche Sätze konzentrieren..Macht es meiner Meinung nach übersichtlicher.
    Jetzt weiß ich ja wie ich das machen kann, ohne eine Brücke einzubauen.

    Bezüglich des Behaviors- würde es sehr interessant finden zu sehen wie das realisiert werden kann. Auf dem jetzigen Wissensstand wüsste ich nicht, wie man das machen sollte/könnte. (Eigenes Control welches von DataGridView erbt und dem entsprechend die Anpassung machen?)
    Option Strict On!

    Drahuverar schrieb:

    Eigenes Control welches von DataGridView erbt und dem entsprechend die Anpassung machen?
    nein, grade das vermeiden.
    In diesem Fall kann es einfach nur ein Eventhandler sein, den man abonniert.

    naja, von wegen einfach - als Behavior muss der Eventhandler nicht nur abonniert sein, sondern an erste Stelle der EventhandlerList - und das ist ein fieser hack:

    VB.NET-Quellcode

    1. Public Class DatagridViewBehavior
    2. Private Shared _GetEvents As FieldInfo = GetType(Component).GetField("events", BindingFlags.NonPublic Or BindingFlags.Instance)
    3. Private Shared _CurrentChangedKey As Object = GetType(DataGridView) _
    4. .GetField("EVENT_DATAGRIDVIEWCELLCONTENTCLICK", BindingFlags.NonPublic Or BindingFlags.Static) _
    5. .GetValue(Nothing) ' that key-name was figgured out that by Disassembler (alternative: Rosylin-website)
    6. Private Shared Sub InsertCurrentChangedHandler(bs As DataGridView, handler As DataGridViewCellEventHandler)
    7. Dim events = DirectCast(_GetEvents.GetValue(bs), EventHandlerList)
    8. Dim prevEvent = events(_CurrentChangedKey)
    9. Dim newEvent As [Delegate] = handler
    10. If prevEvent.NotNull Then
    11. For Each dlg In prevEvent.GetInvocationList
    12. newEvent = [Delegate].Combine(newEvent, dlg)
    13. Next
    14. End If
    15. events(_CurrentChangedKey) = newEvent
    16. End Sub
    17. Private Shared OnCheckbox_CheckEndEdit As DataGridViewCellEventHandler _
    18. = Sub(s, e)
    19. Dim dgv = DirectCast(s, DataGridView)
    20. If TypeOf dgv.Columns(e.ColumnIndex) Is DataGridViewCheckBoxColumn Then dgv.EndEdit()
    21. End Sub
    22. ''' <summary> enforces immediately accept dgv-Input on (un-)checking on dgv-checkboxColumns </summary>
    23. Public Shared Sub OnCheckboxCheckEndEdit(dgv As DataGridView)
    24. InsertCurrentChangedHandler(dgv, OnCheckbox_CheckEndEdit)
    25. End Sub
    Usage:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub New()
    3. InitializeComponent()
    4. DatagridViewBehavior.OnCheckboxCheckEndEdit(ItemDataGridView)
    5. End Sub
    6. Private Sub ItemDataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles ItemDataGridView.CellContentClick
    7. Dim rw = ItemBindingSource.At(Of ItemRow)()
    8. Msg(rw.aNumber) 'aNumber ist die entsprechende Property der row der angebundenen Datatable
    9. End Sub