0

这个问题已经被几个人问过并回答了 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;
4

1 回答 1

0

只能通过使用“文本”值来完成这项工作。尝试“SelectedValue”和“ValueMember”并不能解决问题。当我有时间弄清楚这一点时,我会发布另一个回复。

于 2012-12-12T23:35:46.370 回答