.net - 如何将 ListBox 绑定(bind)到对象上 List 类型的属性?

标签 .net winforms data-binding

我有一个表单,其中的 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/

相关文章:

c# - 如何视觉上连接2个圈子?

c# - 我收到错误消息,提示我缺少引用文献,但是哪一个?

ASP.NET 页面事件 - GridView 绑定(bind)后出现按钮单击事件

.net - 在 Azure 中保护应用程序的客户端 ID 和 key

c# - 复制然后删除 Azure 文件时,删除是否总是在复制完成后开始?

.net - 无法在 WinDbg 中切换到托管线程

.net - 如何创建带有标签和值的 Winforms 组合框?

c# - PCL - 对于某些目标,无法从 Func<IThing<T>> 转换为 Func<Object>

wpf - 从 View 绑定(bind)到 ViewModel 中的复杂对象?

c# - 富文本框 wpf 绑定(bind)