ComboBox的BindingSource和PropertyGrid的[Browable(false)]属性don&#

本文关键字:属性 false don BindingSource PropertyGrid Browable ComboBox | 更新日期: 2023-09-27 18:24:23

我会尽力解释我的问题。

我有一门课:

public class Person()
{
        [Browsable(false)]
        public Int32 Id { get; set; }
        public string Name { get; set; }
        //...
}

我使用PropertyGrid控件来显示Name字段,但我不需要显示Id,所以我将Browsable属性设置为false,如下所示:

[Browsable(false)]
public Int32 Id { get; set; }

在我的GUI中,我在ListView控件中显示Person类的所有元素,当选择一个元素时,我会在PropertyGrid控件中显示如下属性:

void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   this.propertyGrid.SelectedObject = (object)this.listView.SelectedObject;
}

一切正常,PropertyGrid只显示字段Name

然后我需要像这样使用ComboBox控件:

List<Person> people = new List<Person>();
people.Add(...)
//.....
this.comboBox.DataSource = new BindingSource(people, null);
this.comboBox.ValueMember = "Id"; // here an exeption has been thrown !!!
this.comboBox.DisplayMember = "Name";

在线路this.comboBox.ValueMember = "Id";上得到了这个错误:

在System.Windows.Forms.dll中发生类型为"System.ArgumentException"的未处理异常

附加信息:无法绑定到新的显示成员

如何解决这个问题?

PS:如果我删除[Browsable(false)]行,一切正常,但PropertyGrid控件中的Id字段将显示

ComboBox的BindingSource和PropertyGrid的[Browable(false)]属性don&#

我重复了这个问题,在设置DisplayMember和ValueMember属性后,我通过设置DataSource解决了这个问题:

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";
comboBox1.DataSource = new BindingSource(people, null);
相关文章: