Wie fangen DataGridView-validation-Fehler, wenn ich Schreibe Wert in bearbeitbaren Zellen?
Ich habe gesehen, eine Menge von Lösungen für das, wo Datenbindung beteiligt ist, aber habe ich nicht eine Daten-Quelle. In diesem Fall der combo-Zelle gilt nur für 1 Zeile (die anderen Zeilen haben nicht die DataGridViewComboBoxCell).
Ich DataGridViewComboCell wie diese:
DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell();
cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
cell.Items.AddRange(items.ToArray()); //items is List<string>
Und ich wieder dynamisch füllen Sie es später wie folgt:
_cell.Items.Clear();
_cell.Items.AddRange(this.Data.ResponseOptions.Select( d => d.Description).ToArray());
//d.Description is of type string
Aber dann bekomme ich diese fiesen dialog, der sagt:
Folgende Ausnahme aufgetreten ist, in das DataGridView:
System.ArgumentException: DataGridViewComboBoxCell Wert ist nicht gültig.
Ersetzen Sie das Standard-Dialogfeld bitte behandeln Sie das DataError-Ereignis.
Es hilft nicht viel, durch die Art und Weise, zu sagen, es ist nicht "gültig". Ist es fair, senden Sie eine E-Mail an MS sagt Windows Forms ist nicht gültig?
Ich habe versucht, greifen die Zelle die items-Eigenschaft und fügen Sie anschließend die Saiten mit Hilfe einer foreach() mit einer Add () - Aufruf. Ich bekomme immer noch den dialog.
Habe ich auch versucht, blies die ganze Zelle jedesmal, wenn ich wollen, Sie zu aktualisieren und neu eine neue DataGridViewComboCell von Grund auf. Ich bekomme immer noch den dialog.
Ich habe auch versucht manuell überschreiben der Spalten Wert (erfolgreich, wenn ich nicht dieses problem haben). Trifft nicht zu beheben, aber.
Ich nur scheinen, um dieses Dialogfeld wenn ich versuche, um wieder zu bevölkern, die Elemente in der combo-Zelle.
Für jetzt habe ich einfach abgewischt das DataError-Methode.
Irgendwelche Vorschläge?
- Ich habe gesehen, dieser Fehler vor. Es tritt auf, wenn Sie festgelegt haben, dass ein ValueType für die Zelle und die Daten, die Sie füttern sind unterschiedlichen Typs. Haben Sie überprüft, dass?
- das dachte ich auch, aber wie Sie sehen können aus den oben ich habe versucht, indem die Elemente als genau der gleichen Art, die ursprünglich und in der update (in mehrfacher Hinsicht).
- Wenn ich du wäre, würde ich DataError drucken, mir einen Bericht über eine messagebox-von der Art und der Werte der Elemente, die Hinzugefügt werden. Viele Male, was Sie denken, Sie tun, ist nicht das gleiche wie das, was Sie eigentlich tun. Vor allem in C#. Ich vermute, null-Werte, die Wahrheit zu sagen.
- Tat Sie versuchen, das DataError drucken Sie die Werte und Typen, die Sie verursacht, dass es Feuer? Es ist den meisten wahrscheinlich Sie geschossen haben. DataError feuert für jeden Wert, der ungültig ist. Wenn es feuert nur einmal für Sie, dann gibt es nur einen Wert, der ungültig ist. Auch das problem könnte sein, auf den text-Wert der combo. Nicht in der Liste der Werte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage ist ein bisschen alt, aber ich lief in dieses, und es stellt sich heraus, dass ThunderGR hatte absolut Recht. Wenn ich hatte DataError drucken Sie einen Bericht, den ich begann, zu betrachten, die Werte in der Datenbank und bemerkte, dass Sie tatsächlich waren in allen KAPPEN. Einfach geändert, mein string-Werte auf alle caps und nicht mehr erhielt Sie den Fehler.
Hier ist ein Weg, der möglicherweise Umgang mit dem DataError obwohl ich lieber nicht haben, ausgelöst in den ersten Platz.
Diese Weise wird der Wert Hinzugefügt, um die Elemente Sammlung, aber immer noch die Ausnahmen, wo es angemeldet werden können. Habe ich eine messagebox, weil ich immer noch denke, es ist wichtig, dass die Benutzer erleben Sie die Fehlermeldung und Kontaktieren Sie den support, um es fest. Hoffe, das jemand hilft!
WPF verwenden.
Binden Sie die combobox-Spalte im DataGrid an eine Liste.
Singen ein Lied - Sie werden wollen zu, nachdem Sie merken, wie einfach dies zu realisieren ist in WPF!
Stand ich vor der gleichen Ausnahme heute, verbringen viel Zeit, herauszufinden, das Problem. Es stellte sich heraus, dass ich eine Ereignisprozedur, die aufgerufen wird, wenn eine neue Zeile wurde erschaffen für die datagridview. In dieser event-handler-Methode, ich war falsch setzen der combobox-Wert der Zelle auf einen Wert, der nicht existiert, in der items-Auflistung der combox-box.
Also, kurz gesagt, die Ausnahme, die ausgelöst wurde, zeigt die korrekte Meldung. Ich musste nur noch suchen wo genau der falsche Wert war immer im set.
Statt Sie auf die DataGridViewComboBoxColumn.Elemente, müssen Sie DataGridViewComboBoxColumn.DataSource eine Liste von ResponseOptions, und legen Sie DataGridViewComboBoxColumn.ValueType = typeof(ResponseOption).
Ich hatte das gleiche problem und es gelöst hinzufügen zu der Liste, die ich zuweisen der datasource ein Element mit dem entsprechenden leeren Eintrag in der combobox.
Beispielsweise
GetAllMovementKind Methode zurückgeben
List<Model.MovementKind>
Ich hoffe, dass es dir helfen.
Verwalten und validieren Sie die editierbaren Daten in DataGridView-fügen Sie manuell die Folgen Veranstaltung :
und Umsetzung der Veranstaltung auf diese Weise:
in diesem Beispiel verwaltet die Kontrolle od DateTime fiel in e spezifische colum index.