Laden...

Gebundenes DatagridView: nach Entfernen des letzten Datensatzes soll kein neuer hinzufügt werden

Letzter Beitrag vor 15 Jahren 5 Posts 1.642 Views
Gebundenes DatagridView: nach Entfernen des letzten Datensatzes soll kein neuer hinzufügt werden

Hallo zusammen,

ich kämpfe momentan mit folgendem Problem:

In meiner Anwendung gibt es ein gebundenes DatagridView.

Werden alle vorhandenen Einträge daraus entfernt,
wird die "NewRow" automatisch in den Editiermodus versetzt und somit auch eine
neuer Datensatz zur DataSource hinzugefügt.

Wie kann ich dies verhindern ?
D.h. nach dem Entfernen aller Zeilen soll nur die "NewRow" angezeigt werden
(nicht im Editiermodus).

Da ein Bild bekanntlich mehr als tausend Worte sagt,
hab ich das ganze noch einmal grafisch dargestellt.

Gruß,
Florian

Ich habs nicht ausprobiert aber hilft. DataGridView.EndEdit() um den editiermodus zu verlassen? Oder besser: DataGridView.CanelEdit();
Man kann auch abfragen ob es eine temporäre Zeile gibt und dann entsprechend vor dem speichern / beenden der Ansicht Canel oder EndEdit aufrufen, je nachdem was man will.

Hi,

EndEdit, CancelEdit und ClearSelection habe ich bereits in Verbindung mit den Events RowsRemoved und DefaultValuesNeeded ausprobiert. Leider ohne Erfolg 🙁

Es tut sich zudem ein weiteres Problem auf:

Ausgehend von dem oberen Beispiel ist es auch nicht möglich,
die an das DataGridView gebundene Liste komplett zu leeren.
Entfernt man die zwei vorhandenen Einträge, wird die "newRow" automatisch zu einem Teil der Liste.
Markiert man die komplette Zeile und versucht sie per Entfernen Taste zu löschen,
passiert nichts.

Eig. ist das doch ein ganz normaler Anwendungsfall ?

RowsRemoved tritt erst auf, nachdem die Row entfernt wurde, probier mal den Editiermodus zu verlassen bevor die Row entfernt wird, beispielsweise mit UserDeletingRow.

Hat auch nicht funktioniert,
allerdings war es ein Schubser in die richtige Richtung.

Folgende Lösung beseitigt zumindest das im ersten Post geschilderte Problem:


private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            // Prüfen, ob nur noch die zu löschende Zeile
            // und die Zeile für neue Einträge vorhanden ist
            if (dataGridView1.Rows.Count == 2)
            {
                // verhindert, dass die Zeile für einen neuen Eintrag in den Editiermodus versetzt wird
                dataGridView1.AllowUserToAddRows = false;
            }
        }

        private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            if (dataGridView1.Rows.Count == 0)
                dataGridView1.AllowUserToAddRows = true;
        }

Vielen Dank onlinegurke!