【问题标题】:What is the proper way to load up a ListBox?加载 ListBox 的正确方法是什么?
【发布时间】:2008-11-19 20:28:17
【问题描述】:

在 C# .NET 2.0 Winforms 中加载 ListBox 的正确方法是什么?

我想我可以将它绑定到DataTable。没有这样的运气。
我想我可以用Dictionary 绑定它。没运气。

我是否必须编写一个名为KeyValuePair 的类,然后使用List<KeyValuePair> 才能使用对象加载这个东西?也许我错过了一些明显的东西。我希望我的显示文本和值是不同的值。

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    你可以直接bind a DataTable...

    listbox.ValueMember = "your_id_field";
    listbox.DisplayMember = "your_display_field";
    listbox.DataSource = dataTable;
    

    【讨论】:

      【解决方案2】:

      简单的代码示例。假设您有一个具有 3 个属性的 Person 类。 FirstNameLastNameAge。假设您要将列表框绑定到 Person 对象的集合。您希望显示器显示名字,但值是年龄。以下是你的做法:

      List<Person> people = new List<Person>();
      people.Add(new Person { Age = 25, FirstName = "Alex", LastName = "Johnson" });
      people.Add(new Person { Age = 23, FirstName = "Jack", LastName = "Jones" });
      people.Add(new Person { Age = 35, FirstName = "Mike", LastName = "Williams" });
      people.Add(new Person { Age = 25, FirstName = "Gill", LastName = "JAckson" });
      this.listBox1.DataSource = people;
      this.listBox1.DisplayMember = "FirstName";
      this.listBox1.ValueMember = "Age";
      

      诀窍是DisplayMemberValueMember

      【讨论】:

      • DataSource 应该设置在 DisplayMember 和 ValueMember 属性之后,以防止多次请求。
      【解决方案3】:

      假设您的数据类型称为 MyDataType。在该数据类型上实现 ToString() 以确定显示文本。例如:

      class MyDataType
      {
        public string ToString()
        {
          //return the text you want to display
        }
      }
      

      然后您可以获取一个包含您的数据类型的列表,并通过 AddRange() 将其填充到 ListBox 中,如下所示:

      ListBox l;
      List<MyDataType> myItems = new List<MyDataType>(); // populate this however you like
      l.AddRange(myItems.ToArray());
      

      如果您需要更多帮助,请告诉我 - 了解您尝试在列表框中显示的数据类型会有所帮助。

      【讨论】:

      • 我想这看起来很奇怪。如果您正在处理一个仅使用 DataSets/DataTables 并且没有业务对象的小型项目。我想我可能只写一个 KeyValuePair 类。公共类 KeyValuePair { 公共对象键 {get;set;} 公共对象值 {get;set;} }
      • 我什么时候想念他们在框架中添加一个内置的 KVP ......哎呀,我觉得很愚蠢。
      【解决方案4】:

      您可以将数据源设置为您喜欢的任何实现 IList 或 IListSource 的数据源。

      您还需要将 DisplayMember 和 ValueMember 属性设置为您要显示的字段,并分别关联相应的值。

      【讨论】:

        【解决方案5】:

        使用用于降低性能的 DataSource 参数 - 至少在 ComboBoxes 上,

        我现在非常习惯于覆盖对象上的 ToString() 并仅使用 Items.AddRange() 方法添加对象,正如上面的另一位评论者所描述的那样。

        【讨论】:

          【解决方案6】:

          要绑定到字典,您必须将其包装在新的 BindingSource 对象中。

          MyListBox.DataSource = New BindingSource(Dict, Nothing)
          MyListBox.DisplayMember = "Value"
          MyListBox.ValueMember = "Key"
          

          【讨论】:

            猜你喜欢
            • 2019-12-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-17
            相关资源
            最近更新 更多