Ich habe eine DataGridView mit einer Binding-Source an eine Datentabelle gebunden, die von einer Oracle-Datenbank geladen wurde. (btw. Ich glaube nicht, dass die Datenbank-Verbindung dies verursachen könnte)datatable.GetChanges() zeigt immer die erste Zeile von DataGridView
Ich habe auch eine DataGridViewComboBoxColumn an eine Klasse von Personen gebunden (nur "hat" ID und Name), damit ich es anzeigen/bearbeiten lassen kann der Name anstelle der ID Mein Problem ist nun, dass C# nach dem Abschluss der Datenbindung automatisch die erste Zelle des DGV "auswählt" - siehe angehängtes Bild.
Ich habe auch dieses kleine Stück Code verwenden, um die Datenintegrität sicherzustellen:
private void _table_ColumnChanging(object sender, DataColumnChangeEventArgs e)
{
if (e.Column == _table.Columns["NEEDED_ID"])
{
if (e.ProposedValue == null)
{
e.ProposedValue = System.DBNull.Value;
}
}
}
nun unter Verwendung dieser _table.GetChanges() liefert immer die erste Zeile des DGV als „modifizierte "Aber der Wert wird nicht wirklich geändert - es ist nur DBNull
statt null
. Kann ich irgendwie die automatische Auswahl der ersten Zelle vermeiden oder wie kann ich dieses Verhalten vermeiden?
EDIT: Inzwischen habe ich festgestellt, dass das Ändern der ersten Spalte zu etwas nicht editierbar dieses Problem behebt. Aber das ist nichts anderes als ein Workaround. Ich würde es sehr schätzen, eine funktionierende Lösung dafür zu bekommen.
EDIT 2: Ich habe auch ein leeres Objekt 'auf' der ComboBox-Datasource
DtoPerson blankPerson = new DtoPerson();
blankPerson.Name = String.Empty;
blankPerson.PersonRollenId = -1;
personList.Add(blankPerson);
in Bezug auf EDIT 2: Das ist nicht gerade ein leeres Objekt, Sie sollten den Primärschlüssel Ihres blankPersons auf DBNull.Value setzen. Obwohl IMO der einfachste Weg ist, Ihr Problem zu lösen, ohne etwas am Front-End zu berühren, ist, UNION SELECT NULL, NULL für Ihre Abfrage zu verwenden. ADO.NET konvertiert diese NULL-Werte automatisch in den entsprechenden .NET-Typ (d. H. DBNull.Value); Ich habe die gleiche Technik benutzt, es funktioniert. Aber zuerst, machen Sie Ihren DtoPerson Primärschlüssel einen Objekttyp, so dass Ihr ORM/DAL DBNull ihm zuweisen kann –