在 WinForms 中将 Listbox 绑定到 List<object>

Posted

技术标签:

【中文标题】在 WinForms 中将 Listbox 绑定到 List<object>【英文标题】:Binding Listbox to List<object> in WinForms 【发布时间】:2011-02-10 03:07:30 【问题描述】:

将列表框绑定到 Windows 窗体中的对象列表的最简单方法是什么?

【问题讨论】:

你的平台是什么?银光? WPF?窗体? ASP.NET?答案有点取决于这些知识。 【参考方案1】:

您正在寻找DataSource property

List<SomeType> someList = ...;
myListBox.DataSource = someList;

您还应该将DisplayMember 属性设置为您希望列表框显示的对象中的属性名称。如果你不这样做,它会调用ToString()

【讨论】:

如何通过选择从列表框中删除 SomeType 项? someList.Remove((SomeType)myListBox.SelectedValue);(在 WinForms 中) 你好。只要我不向收藏中添加任何东西,它就对我有用。只要我更改列表框中的收藏项,就不会更新。即使在更改集合中的项目后分配数据源。 @SASS_Shooter:问题是关于 WinForms。 要在 WinForms 中处理对集合的更新,请使用 BindingList&lt;T&gt;【参考方案2】:

将System.Windows.Forms.Listbox 控件绑定到对象列表(此处为动态类型)

List<dynamic> dynList = new List<dynamic>()  
            new Id = 1, Name = "Elevator", Company="Vertical Pop" ,
            new Id = 2, Name = "Stairs", Company="Fitness" 
;

listBox.DataSource = dynList; 
listBox.DisplayMember = "Name";
listBox.ValueMember = "Id";  

【讨论】:

我知道这个问题不相关,但是:您将如何访问Company 成员? @Wolf 你不能,除非你自己挖掘列表;省略 ValueMember 设置,以便 SelectedValue 是整个对象可能会更容易【参考方案3】:

假设您正在显示具有“customerName”和“customerId”属性的客户对象列表:

listBox.DataSource = customerListObject;
listBox.DataTextField = "customerName";
listBox.DataValueField = "customerId";
listBox.DataBind();

编辑:我知道这在 asp.net 中有效——如果你正在做一个 winforms 应用程序,它应该非常相似(我希望......)

【讨论】:

Windows.Forms.Listbox 有其他成员;见下文。 @surfmuggle ... 和DataBind() 方法不存在,我猜?【参考方案4】:

当然,除非对象已正确覆盖 ToString()(或者您没有真正使用通用对象列表并且可以绑定到特定字段),否则这不会为您提供任何真正有意义的东西:

List<object> objList = new List<object>();

// Fill the list

someListBox.DataSource = objList;

【讨论】:

【参考方案5】:
ListBox1.DataSource = CreateDataSource();
ListBox1.DataTextField = "FieldProperty";
ListBox1.DataValueField = "ValueProperty";

详细示例请参考this文章。

【讨论】:

【参考方案6】:

我没有在这里看到它,所以我发布它,因为对我来说是 winforms 中的最佳方式:

    List<object> objList = new List<object>();

    listBox.DataSource = objList ;

    listBox.Refresh();
    listBox.Update();            

【讨论】:

哦,天哪……谢谢!自从我在 WinForms 工作以来已经 12 年了,我被困了将近两个小时,试图让这个 &@%$ ListBox 正常运行。【参考方案7】:

这里有两条主要路线:

1:listBox1.DataSource = yourList;

对 yourList 进行任何操作(添加/删除)并重新绑定。 设置 DisplayMember 和 ValueMember 来控制显示的内容。

2:listBox1.Items.AddRange(yourList.ToArray());

(或者使用for循环来做Items.Add(...)

您可以通过重载列表对象的 ToString() 或实现 listBox1.Format 事件来控制 Display。

【讨论】:

你如何重新绑定?【参考方案8】:

对于 UWP 应用:

XAML

<ListBox x:Name="List" DisplayMemberPath="Source" ItemsSource="x:Bind Results"/>

C#

public ObservableCollection<Type> Results

【讨论】:

问题被标记为 WinForms。 @LarsTech 没有注意到,因为它不是标题或文本的一部分,但我通过为 UWP 寻找相同问题的答案来到这里,也许其他人也会找到这个回答有用。

以上是关于在 WinForms 中将 Listbox 绑定到 List<object>的主要内容,如果未能解决你的问题,请参考以下文章

在 C# .net winforms 中将字典绑定到 ComboBox

将数据绑定到 ListBox 并将列表发布到数据库 mvc5

如何检测是不是将项目添加到 ListBox(或 CheckedListBox)控件

程序不会让我以任何方式清除我的 listBox [C#, WinForms]

Winforms Listbox,尽管Drawmode被OwnerDrawFixed,如何使显示成员工作?

如何在winforms的datagridview中将字符串排序为数字