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);
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