2009-05-05 7 views
0

gebunden und aktualisiert hat Ich habe eine DataGridView, wo die DataSource eine BindingList ist. Die meisten Spalten werden aktualisiert - über verschiedene Timer, die PropertyChanged ("...") für die gebundenen Spalten aufrufen. Eine Spalte - die problematische - ist eine DataGridViewComboBoxColumn - wo der Benutzer ein Element aus der Liste der Elemente auswählt.Editieren eines DataGridView, das Spalten in C#

Das Problem ist, dass die DataGridViewComboBoxColumn nicht verwendbar ist. Es blinkt die ganze Zeit - anscheinend, wenn PropertyChanged Ereignisse auftreten - und welches Element ich auch auswählen möchte, es bleibt unverändert.

Irgendeine Idee, was ich falsch mache?

Antwort

0

Zuerst fügen Sie Codebeispiel hinzu, damit wir besser verstehen können, was Sie meinen.

Zweitens, was Sie tun, klingt seltsam. Warum rufen Sie PropertyChanged() manuell für den Timer auf? Warum implementierst du INotifyPropertyChanged nicht in deiner Klasse?

Oder Sie könnten einen Wrapper verwenden, der ICustomTypeDescriptor und INotifyPropertyChanged für Ihre Artikel implementiert. In diesem Fall fügt der Wrapper automatisch die INotifyPropertyChanged-Implementierung für Ihre Klassen hinzu. Suchen Sie im Internet nach Informationen darüber, warum Sie ICustomTypeDescriptor benötigen und wie es helfen kann.

+0

Nun, ich gebe zu, was ich mache ist ein bisschen komisch. Ich implementiere INotifyPropertyChanged in meiner Klasse. Die Klasse hat auch einen Timer, der PropertyChanged für einige Elemente aufruft, die sich sehr oft (oft pro Sekunde) aus Leistungsgründen ändern (basierend auf Profilergebnissen). Soweit Code-Beispiele, ist es aus einer großen komplexen Codebasis. Ich werde es versuchen. –

0

Ein Problem, das Sie möglicherweise haben, ist, dass das DataGridViewComboBox-Steuerelement seine Wertänderung nicht festschreibt, bis die Zelle vom Benutzer bestätigt wird, der in eine andere Zelle wechselt. Sie können dieses Verhalten erzwingen, wenn der Wert mithilfe des CurrentCellDirtyStateChanged-Ereignisses geändert wird.