如何将ListBox绑定到对象上的List类型的属性?

时间:2009-07-02 07:32:16

标签: .net winforms data-binding

我有一个带有DataGridView的表单,其中显示了一个客户列表,下面有一些文本框显示了在网格中选择的客户的详细信息。

我有Customer类和Customer对象的CustomerList类,以及一个将DataSource设置为CustomerList的BindingSource。网格的DataSource就是这个BindingSource。

绑定文本框很简单 - 我只使用相同的BindingSource并指定我想要显示的Customer属性。问题是Customer的一个属性本身就是一个列表,我想在这个列表中显示这个列表。列表框。

如何使用数据绑定在ListBox中显示此列表,并在每次单击网格中的客户时更新列表?

2 个答案:

答案 0 :(得分:5)

您可以使用关联的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
                }
            }
        });
    }
}

答案 1 :(得分:0)

我认为该属性是一个字符串列表。

您需要像处理文本一样,执行:

listBox1.DataSource = ListOfProperties;

只需在客户更改时更改列表。 如果您发布代码,将更容易知道真正的问题是什么。