我将尝试解释我的问题。
我有一堂课:
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中,我在
Person
控件中显示ListView
类的所有元素,并且当选择一个元素时,我在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)]
行,一切正常,但是Id
控件中的PropertyGrid
字段将显示 最佳答案
我重复了该问题,并通过在设置DisplayMember和ValueMember属性后设置DataSource来解决此问题:
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";
comboBox1.DataSource = new BindingSource(people, null);
关于c# - 到ComboBox的BindingSource和到PropertyGrid的[Browsable(false)]属性不能一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17816708/