【问题标题】:How to insert data from List into ListBox?如何将数据从 List 插入 ListBox?
【发布时间】:2015-12-13 15:57:02
【问题描述】:

我创建了一个名为employees 的列表,我想将来自该List 的所有信息输入到表单上的列表框中。

我不敢相信我已经忘记了这一点。我环顾四周,找不到任何简明的信息,我有一本学习书,但他们使用 TextBox 而不是 ListBox,而且它们仅适用于数组和简单的数据类型。

List<Employee> employees = new List<Employee>();

这是列表,它包含employees

Employee employee1 = new Employee(1111, "Name", "Skill Set");

我创建了一个List的实例

然后我将它添加到表单上的列表框中

lstFree.Items.Add(employees);

但它只显示为“收藏”

我做错了什么?

【问题讨论】:

    标签: c# winforms listbox


    【解决方案1】:

    Add 方法需要您的类的单个实例。当您将集合传递给它时,它会调用ToString(),您最终会看到集合的完整类名。不是你想要的。

    相反,您可以使用循环:

    foreach (var emp in employees)
        lstFree.Items.Add(emp);
    

    或者直接分配给DataSource:

    listBox1.DataSource = employees;
    

    您还需要告诉它向用户显示哪个属性(以及可选地,使用哪个属性作为基础值):

    listBox1.DisplayMember = "Name";
    listBox1.ValueMember = "EmpId";   // guessing what your class properties might be called
    

    【讨论】:

    • 虽然您的评论很有帮助并且可能是最适合的,但我无法让 DataSource 在我的 GUI 表单上工作,它崩溃了或其他什么,所以不幸的是我不得不将最佳答案交给另一个人,虽然我赞成你。谢谢。
    【解决方案2】:
    List<Employee> employees = new List<Employee>();
    Employee employee1 = new Employee(1111, "Name", "Skill Set");
    Employee employee2 = new Employee(2222, "Name", "Skill Set");
    employees.Add(employee1);
    employees.Add(employee2);
    
    foreach(var empl in employees)
    {
        listBox1.Items.Add(empl.ToString());
    }
    

    在员工类中:

    public override string ToString()
    {
        return ""; // return what you need
    }
    

    【讨论】:

    • 那么有没有办法将employees.Add(xxxx) 放入一个循环中,以便它根据list 内部的实例数自动添加它们
    • 是的,只需将listBox1.Items.Add(empl.ToString()); 替换为listBox1.Items.Add(new Employee(2222, "Name", "Skill Set").ToString());
    【解决方案3】:

    考虑使用 AddRange。

    object[] arr = Enumerable.Range(1, 10000).Select(i=>(object)i).ToArray();
    

    比较这个时间

    // 1,29s
    foreach (int i in arr)
    {
        listBox1.Items.Add(i);
    }
    

    到这里

    // 0,12s
    listBox1.Items.AddRange(arr);
    

    【讨论】:

    • 我一直在寻找更高效的代码,感谢您帮助我发展自己的技能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2023-01-10
    • 2020-09-06
    相关资源
    最近更新 更多