Beim ändern des SelectedValue einer DataGridViewComboBoxCell sowohl den alten als auch den neuen Wert erhalten

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von DianonForce.

    Beim ändern des SelectedValue einer DataGridViewComboBoxCell sowohl den alten als auch den neuen Wert erhalten

    Moin Community,
    ich brech mir mal wieder einen ab und bin mir nicht sicher ob das wirklich so komplizert ist oder ich nur den richtigen Ansatz nicht finde.

    Ich habe ein DataGridView mit einer DataGridViewComboBox darin. Das DataGridView ist an eine Tabelle gebunden, die DataGridViewComboBox bekommt ihre Daten aus der Tabelle tblStatus, .ValueMember ist ID , DisplayMember ist Status.

    Die Tabelle sieht volgender masen aus:

    ID
    Status
    Eskalation
    10
    unbearbeitetfalse
    11
    in arbeit
    false
    12
    offenfalse
    13
    Wartetfalse
    99
    eskalationtrue
    100
    eskalation in arbeittrue
    101
    eskalation erledigttrue
    102
    eskalation abgeschlossentrue

    Der Anwender soll den Staus über die Combobox ändern können, sollte der Status aber bei Eskalation TRUE sein, so darf der neu Status bei Eskalation nicht False sein.

    In der bisherigen Access Datenbank wurde dies recht einfach gelöst, die ComboBox dort lieferte mit .oldValue und.value den alten und neuen Wert und dann wurde nur geprüft ob das Eskalations Flag im Alten Wert TRUE war, dann musste auch das Eskalationsbit im neuen Wert TRUE sein.

    Dummerweise liefert DataGridViewComboBox kein .oldValue, somit hab ich irgendwie keine Ahnung wie ich den alten und neuen Wert vergleichen soll. Mus ich hier echt über CellBeginEdit mir den aktuellen Wert in eine Variable speichern damit ich ihn später vergleichen kann?

    DianonForce schrieb:

    Der Anwender soll den Staus über die Combobox ändern können
    Du meinst mit ändern einen anderen Status aus der DatagridviewComboboxColumn des DGV's auswählen - oder?

    DianonForce schrieb:

    sollte der Status aber bei Eskalation TRUE sein, so darf der neu Status bei Eskalation nicht False sein.
    ??? erkläre das nocheinmal genauer...

    VB1963 schrieb:

    Zitat von DianonForce: „Der Anwender soll den Staus über die Combobox ändern können“Du meinst mit ändern einen anderen Status aus der DatagridviewComboboxColumn des DGV's auswählen - oder?Zitat von DianonForce: „sollte der Status aber bei…


    1. Exakt
    2. Wenn der Aktuelle Status in der Spalte Eskalation true ist, darf der Anwender keinen Status setzten, der in der Spalte Eskalation false ist.
    Wie ich das verstehe, möchtest du die Auflistung deiner ComboboxColumn in Abhängigkeit eines Zustandes variabel gestalten...
    Dazu hat @ErfinderDesRades ein Tutorial verfasst, wie man das ermöglichen kann.
    Combobox-Auswahl einschränken
    Schaue es dir einmal an...

    DianonForce schrieb:

    In der bisherigen Access Datenbank wurde dies recht einfach gelöst, die ComboBox dort lieferte mit .oldValue und.value den alten und neuen Wert
    Jo, sowas muss man sich leider immer selber bauen, und das ist garnet soo einfach.

    aber im System.Windows.Forms.DataGridView.CellBeginEdit - Event kannste den vorher-Zustand festhalten
    und im System.Windows.Forms.DataGridView.CellEndEdit ist der Vorgang abgeschlossen - vlt. kann man ihn an dieser STelle revidieren.

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

    Man könnte Old- und NewValue auch direkt im Dataset eruieren:

    VB.NET-Quellcode

    1. Partial Class EinDataSet
    2. Partial Class EineTableDataTable
    3. Public Property OldValue As String
    4. Public Property NewValue As String
    5. Private Sub EineTabelle_ColumnChanging(sender As Object, e As DataColumnChangeEventArgs) Handles Me.ColumnChanging
    6. If e.Column Is MeineColumnColumn Then
    7. NewValue = e.ProposedValue.ToString
    8. Dim rw = DirectCast(e.Row, EineTabelleRow)
    9. OldValue = If(rw.IsMeineColumnNull, "", rw.MeineColumn)
    10. End If
    11. End Sub
    12. End Class
    13. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()