这个问题已经被几个人问过并回答了 100 次。但是,我似乎仍然有问题。我有一个 ComboBox,我有一个 DataBinding 到数据库中一个整数列。我有一个填充 ComboBox 数据源的 Dictionary 类。当我运行表单时,ComboBox 中不显示任何内容,或者显示数据库中的 Integer 值,而不是 Dictionary 中的“Text”。我附上了表格的图片;
这是用于生成此 ComboBox 的代码;
public static SortedDictionary<int, string> SecurityCodes()
{
SortedDictionary<int, string> SecurityCodes = new SortedDictionary<int, string>
{
{1, "View only"},
{3, "Print reports"},
{4, "Post changes"},
{5, "Edit records"},
{6, "Revise postings"},
{7, "Add records"},
{8, "Remove postings"},
{9, "Supervisor"},
{10, "Programmer"}
};
return SecurityCodes;
}
this.cboSecurity.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.loginInfoBindingSource, "Security_Level", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.cboSecurity.DataSource = new BindingSource(BaseDictionaries.SecurityCodes(), null);
this.cboSecurity.DisplayMember = "Value";
this.cboSecurity.ValueMember = "Key";
现在,如果我将 DataBinding 更改为“ValueMember”而不是“Text”,文本将显示,但当您导航到另一条记录时它不会更新,它始终保留在 Dictionary 的第一项上。如果我将 DataBinding 更改为具有与 Dictionary 中的内容匹配的条目的视图,则适当的“Text”将显示在 DataBinding 设置为“Text”的 ComboBox 中。没关系,但是我必须在数据库中维护一个只有这些条目的表,我不想走那条路。
谁能看到我做错了什么?
我尝试了许多不同类型的 DataSource 组合,包括以下几种,但行为没有改变;
SortedDictionary<int, string> loDataSource = BaseDictionaries.SecurityCodes();
KeyValuePair<int, string>[] kvp = new KeyValuePair<int,string>[loDataSource.Count];
loDataSource.CopyTo(kvp,0);
new BindingSource(kvp, "Key");
this.cboSecurity.DataSource = kvp;