【问题标题】:How to bind a ListBox to a property of type List on an object?如何将 ListBox 绑定到对象上的 List 类型的属性?
【发布时间】:2010-11-07 13:30:31
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net winforms data-binding


    【解决方案1】:

    我假设该属性是一个字符串列表。

    所有你需要做的就像你对文本所做的那样,做:

    listBox1.DataSource = ListOfProperties;
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 创建表单的极简主义方法。
      • 爱对象/集合初始化器;-p
      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2011-05-28
      • 2017-04-08
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多