Binden Sie eine ComboBox an eine IList und mit SelectedValue
-
05-07-2019 - |
Frage
Ich habe eine ComboBox
set up wie folgt, wobei KVPList
ist ein IList
(von KeyValuePair
wenn es darauf ankommt):
comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;
Ich habe dann eine Bindung mit SelectedValue
, die Bindung an einen BindingSource
(ein DataSet
).Für was auch immer Grund, combo-box kommt immer leer, wenn das Formular angezeigt wird.Es ist gut bevölkert ist, jedoch (die Werte der IList
zeigen sich gut und ausgewählt werden können).
Nun, ich habe mein bestes versucht, Spur, durch, und es scheint, zunächst auf die SelectedValue richtig, wenn gebunden, dann aber irgendwo auf dem Weg wird es zurückgesetzt, um null
.Ich habe gespielt mit der Bestellung werden die Dinge genannt, wie auch, ohne Erfolg.
Kann jemand etwas Licht in diese Schuppen oder schlagen Sie eine Problemumgehung?
Für den Datensatz, auf den die gleiche form haben, habe ich ein weiteres ComboBox
auf dem gleichen Formular, mit seiner SelectedValue
die an das gleiche BindingSource
.Die DataSource
ist ein DataSet
, nicht ein IList
und es funktioniert wie ein Charme.Es könnte eine option sein, um eine DataTable
aus der IList
, aber wie es scheint, eine ganze Menge zusätzlicher overhead;Ich bin generieren IList
von einer Aufzählung.
Lösung
Autsch.Nach im Grunde einen halben Tag verschwendet, ich habe es herausgefunden.Es war komplett ein Fehler meinerseits.
Die KVPList
wurde eingestellt, um eine IList
von KeyValuePair<
short
,string>
, aber das Feld ist vom Typ int
.Im wesentlichen, das databinding würde Feuer, und setzen Sie die SelectedValue
Eigenschaft.Dann die DisplayMember
und ValueMember
Bindungen entlassen würde, die überprüfung der SelectedValue
wieder.Da die ValueMember
Typ short
, nicht int
, wäre es nicht finden, eine übereinstimmung und somit auf null.
Etwas komisch muss passiert sein mit boxing und unboxing, aber ich bin zu müde, um zu verstehen, warum gerade jetzt.
Ich lasse diese Frage in den Fall, dass jemand anderes läuft in das gleiche Problem.Es ist schwer aufzuspüren, denn ich würde erwarten, dass es entweder versuchen zu werfen oder werfen eine Ausnahme, nicht leise gehen null.Nach alle, short
und int
sind beide Werttypen und zuletzt habe ich überprüft (int)10 == (short)10
gilt.