我有一个表单,其中的 DataGridView 显示客户列表,下面的一些文本框显示在网格中选择的客户的详细信息。
我有一个 Customer 类和一个 Customer 对象的 CustomerList 类,以及一个将 DataSource 设置为 CustomerList 的 BindingSource。网格的DataSource就是这个BindingSource。
绑定(bind)文本框很简单 - 我只需使用相同的 BindingSource 并指定我想要显示的 Customer 的属性。问题是 Customer 的属性之一本身就是一个列表,我想在例如中显示此列表一个列表框。
如何使用数据绑定(bind)在列表框中显示此列表,并在每次单击网格中的客户时更新列表?
最佳答案
您可以使用链接的BindingSource
。完整的示例如下,但唯一有趣的是:
BindingSource outer = new BindingSource(customers, ""),
inner = new BindingSource(outer, "Orders");
代码如下:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
class Order
{
public string OrderRef { get; set; }
public override string ToString() {
return OrderRef;
}
}
class Customer
{
public string Name {get;set;}
public Customer() { Orders = new List<Order>(); }
public List<Order> Orders { get; private set; }
}
static class Program
{
[STAThread]
static void Main()
{
List<Customer> customers = new List<Customer> {
new Customer {Name = "Fred", Orders = {
new Order { OrderRef = "ab112"},
new Order { OrderRef = "ab113"}
}},
new Customer {Name = "Barney", Orders = {
new Order { OrderRef = "ab114"}
}},
};
BindingSource outer = new BindingSource(customers, ""),
inner = new BindingSource(outer, "Orders");
Application.Run(new Form
{
Controls =
{
new DataGridView {
Dock = DockStyle.Fill,
DataSource = outer},
new ListBox {
Dock = DockStyle.Right,
DataSource = inner
}
}
});
}
}
关于.net - 如何将 ListBox 绑定(bind)到对象上 List 类型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1072985/