Hallo,
ich habe ein DataGridView -> BindingSource -> Liste von Objekten. In einem 2. DataGridView werden einige der Daten (einige Zeilen) aus dem 1. DataGridView verknüpft. Jetzt möchte ich z.B. per ausgrauen darstellen, welche Zeilen im 1. DataGridView im 2. nicht gebraucht werden. Der User soll dann die Möglichkeit haben, die nicht gebrauchten Daten zu löschen.
Wie geht so etwas?
Zumindest was das Löschen aus der jeweiligen View (nicht aus den verwendeten Datensätzen) angeht, könnte das hier helfen: https://www.csharp-console-examples.com/winform/deleting-selected-row-in-datagridview-in-c-by-using-button/
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉
Das Löschen ist nicht das Problem: das macht der BindingNavigator. Aber in dem 2. DataGridView wird das erste per ComboBox verknüpft. Genau das wirft dann eine Exception: "Der DataGridViewComboBoxCell-Wert ist ungültig", was ja logisch ist. Ich muss also beim Löschen in dem 1. DataGridView sicherstellen, dass diese Daten nicht in dem 2. DataGridView gebraucht werden. Ich muss also das Löschen abfangen und erst erlauben, wenn die entsprechenden daten nicht im 2. benötigt werden.
Da habe ich mein erstes Problem: Wie fange ich das ab?
Nach langer Suche habe ich jetzt herausgefunden, wie man das Löschen abfangen kann.
private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
{
bool used = false;
for (int loop = 0; loop < Leds.Count; loop++)
{
if (Leds[loop].Ledfarbname == Farben[BindingSourceFarben.Position].Farbname)
{
used = true;
break;
}
}
if (used)
{
string message = "Mindestens eine Led hat die Farbe " + Farben[BindingSourceFarben.Position].Farbname
+ " in Gebrauch. Daher kann die Farbe " + Farben[BindingSourceFarben.Position].Farbname
+ " nicht gelöscht werden.";
const string caption = "Löschen nicht erlaubt";
var result = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
BindingSourceFarben.RemoveCurrent();
}
Wie soll man darauf kommen?
Ich habe den Tipp hier https://social.msdn.microsoft.com/Forums/en-US/ab77433f-94c5-49c5-9c54-4dd1349d9c2a/bindingnavigator-delete-cancel?forum=vbgeneral gefunden. Selbst dort muss man ca. 2/3 herunterscrollen um den Tipp zu finden.