我有几个类的对象:
class Person
{
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public override string ToString()
{
return Name + "; " + Sex + "; " + Age;
}
}
以及具有Person
类型属性的类:
class Cl
{
public Person Person { get; set; }
}
我想将Cl.Person
绑定到组合框。当我尝试这样做时:
Cl cl = new cl();
comboBox.DataSource = new List<Person> {new Person{Name = "1"}, new Person{Name = "2"}};
comboBox.DataBindings.Add("Item", cl, "Person");
我得到ArgumentException
。我应该如何修改我的绑定以获得正确的程序行为?
提前谢谢!
答案 0 :(得分:7)
绑定到“SelectedItem”:
var persons = new List<Person> { new Person() { Name = "John Doe"}, new Person() { Name = "Scott Tiger" }};
comboBox1.DisplayMember = "Name";
comboBox1.DataSource = persons;
comboBox1.DataBindings.Add("SelectedItem", cl, "Person");
答案 1 :(得分:3)
对于简单的数据绑定,这将起作用
cl.Person = new Person{ Name="Harold" };
comboBox.DataBindings.Add("Text",cl.Person, "Name");
但我认为这不是你想要的。我想你想绑定到一个项目列表,然后选择一个。要绑定到项目列表并显示Name属性,请尝试以下操作:
comboBox.DataSource = new List<Person> {new Person{Name = "1"}, new Person{Name = "2"}};
comboBox.DisplayMember = "Name";
如果您的Person类重写了Equals(),那么,如果Person具有相同的Name,那么Person等于另一个,那么绑定到SelectedItem属性将如下所示:
Cl cl = new Cl {Person = new Person {Name="2" }};
comboBox.DataBindings.Add("SelectedItem", cl, "Person");
如果你不能覆盖Equals(),那么你只需要确保从DataSource列表中引用Person实例,因此下面的代码适用于你的特定代码:
Cl cl = new Cl();
cl.Person = ((List<Person>)comboBox1.DataSource)[1];
comboBox.DataBindings.Add("SelectedItem", cl, "Person");
答案 2 :(得分:1)
尝试
comboBox.DataBindings.Add("Text", cl, "Person.Name");
代替
你需要告诉组合框你要将哪个属性绑定到对象上的哪个属性(它的Text属性,在我的示例中将显示所选人员的Name属性)。
* 编辑: * 其实废话,我感到困惑。你几乎拥有它,只有组合框没有;有一个名为item的属性,你想要SelectedItem,就像这样:
Cl cl = new cl();
comboBox.DataSource = new List<Person> {new Person{Name = "1"}, new Person{Name = "2"}};
comboBox.DataBindings.Add("SelectedItem", cl, "Person");
答案 3 :(得分:0)
如果您使用Enums,可能是您有一类枚举,您可以使用这样的组合框
指定组合框数据,例如
comboBoxname.DataSource = Enum.GetValues(typeof(your enum));
现在让我们绑定combox框,因为我们有数据源
comboBoxname.DataBindings.Add("SelectedItem",
object,
"field of type enum in the object");