Laden...

DataGridView CellValue prüfen (keine Änderung durchgeführt...)

Erstellt von ChrisProg vor 5 Jahren Letzter Beitrag vor 5 Jahren 764 Views
ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 5 Jahren
DataGridView CellValue prüfen (keine Änderung durchgeführt...)

Hallo zusanmen,

ich stehe gerade auf dem Schlauch...

Folgendes Problem:

In einem DataGridView sind sind u.a. zwei Felder die abhängig von einander sind, d.h. wenn in Feld "x" etwas steht, muß in Feld "y" auch etwas stehen, oder aber Feld "x" muß wieder geleert werden !

Wenn der User im Feld "y" eine Änderung vorgenommen hat, dann ist das ganze ja kein Problem --> CellValidating u. dort e.Cancel auslösen

Aber wie kann ich das gleiche Verhalten auslösen, wenn der User das Feld "y" mit TAB oder der Maus verlässt, ohne das er etwas eingegeben hat ?

Ich habe schon CellLeave versucht um dann dort CellValidating aufzurufen, das scheitert aber daran das DataGridViewCellValidatingEventArgs nur internal sind ...

Wenn ich CellEnter benutze, u. dort nach entsprechender Prüfung

     ((DataGridView)(sender)).BeginEdit(false);

aufrufe, so wird DataGridView_CellBeginnEdit aufgerufen, der entsprechende Eintrag dort auch abgearbeitet, das dort ausgelöste e.Cancel aber ignoriert 🤔

 
 if (e.ColumnIndex >= 1)
{
    if ((((DataGridView)(sender)).CurrentCell.OwningColumn).DataPropertyName == "y")
    {
        Int32 _x = 0;
        Int32.TryParse(((DataView)(((MarshalByValueComponent)(bs_positionen.List))))[bs_positionen.Position]["x"].ToString().Trim(), out _x);
        if (_x > 0 && (((DataView)(((MarshalByValueComponent)(bs_positionen.List))))[bs_positionen.Position]["y"].ToString().Trim() == "" ||
                        ((DataView)(((MarshalByValueComponent)(bs_positionen.List))))[bs_positionen.Position]["y"].ToString().Trim() == "0"))
        { e.Cancel = true; }
    }
}

Nun war der weitere Gedanke, das durch BeginEdit ja auch beim Verlassen der Zelle ja auch CellValidating aufgerufen werden müsste, da die Zelle ja nun in Bearbeitungsmodus ist - wird es aber nicht ...

Hat Jemand eventuell einen Lösungsansatz für mich oder kann mir den Fehler in meinen Gedanken erläutern ?

MfG Christian