Laden...

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

Erstellt von flokel vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.592 Views
F
flokel Themenstarter:in
27 Beiträge seit 2009
vor 14 Jahren
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

T
381 Beiträge seit 2009
vor 14 Jahren

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.

F
flokel Themenstarter:in
27 Beiträge seit 2009
vor 14 Jahren

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 ?

O
778 Beiträge seit 2007
vor 14 Jahren

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

F
flokel Themenstarter:in
27 Beiträge seit 2009
vor 14 Jahren

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!