Merkwürdigkeiten beim dataGridView (VS 2008)



  • Ich sehe gerade: gehört eher ins C# mit .Net Forum, vielleicht kann das jemand verschieben.

    Vorweg: ich liebe diese dataGridView-Komponente wegen der vielen Möglichkeiten. Im aktuellen Projekt benutze ich sie, um Ergebnisse von Datenbankabfragen dort anzuzeigen, ohne eine direkte Bindung an die Datenbank vorzunehmen.

    Es sind allerdings ein paar Merkwürdigkeiten aufgefallen.

    Ich habe eine Spalte mit Combo-Boxen in der Tabelle. Ich reagiere auf Änderungen in den Werten dieser Combo-Boxen.

    In der Methode EditingControlShowing erzeuge ich zunächst die Methode, um auf Textänderungen zu reagieren:
    editingControl = (DataGridViewComboBoxEditingControl)e.Control;
    editingControl.TextChanged += new EventHandler(editingControl_TextChanged);

    In der Methode CellEndEdit wird das wieder entfernt:
    editingControl.TextChanged -= new EventHandler(editingControl_TextChanged);
    editingControl = null;

    So weit, so gut. Nun ein paar Merkwürdigkeiten:

    Die Methode editingControl.TextChanged dieser ComboBox wird nur aufgerufen, wenn der Text mittels Mausklicks geändert wird.
    Wird auf die ComboBox geklickt und deren Text durch Tastatureingabe verändert, wird die Methode nicht aufgerufen.

    Dies habe ich versucht, in CellEndEdit zu behandeln, in dem der dort ausgelesene Text mit dem Text aus EditingControlShowing verglichen wird und bei einer Änderung entsprechend reagiert wird.

    Das geht im Prinzip auch, allerdings kann ich in diesem Fall nicht mehr die Tabelle löschen, es kommt dann ein Fehler:
    Der Vorgang ist ungültig, da er einen Wiedereintrittsaufruf an die SetCurrentCellAddressCore-Funktion zur Folge hat

    Der selbe Fehler kommt stets auch, unabhängig ob Änderung durch Maus oder Tastatur, wenn ich irgendwo im Code ein
    Application.DoEvents(), z. B. zu Anfang der CellEndEdit einfüge. Warum eigentlich ?

    Noch eine Merkwürdigkeit: Unter bestimmten Bedingungen soll der Text der ComboBox wieder auf den ursprünglichen Wert zurückgesetzt werden. Wurde die Änderung durch Mausklick gemacht, funktioniert zur Rückänderung des Textes nur ein editingControl.Text = MeinString, bei Änderung durch Tastatur funktiniert das nicht, dort geht nur ein dataGridView.Rows[x].Cells[y].Value = MeinString, was bei durch Mausklick geändertem Text wiederum nicht funktioniert.

    Kann jemand diese Merkwürdigkeiten nachvollziehen oder erklären ? Habe ich noch was wichtiges übersehen ?


Anmelden zum Antworten