【问题标题】:can not set ValueMember to listBox in winforms无法在 winforms 中将 ValueMember 设置为 listBox
【发布时间】:2021-07-07 15:48:22
【问题描述】:

我无法将 ValueMember 设置为 listBox

我有职业技能

class Skill
    {
        public string skillId { get; set; }
        public string name { get; set; }

        public Skill()
        {
        }

        public Skill(string skillId, string name)
        {
            this.skillId = skillId;
            this.name = name;
        }
    }

我将列表技能添加到列表中

            List<Skill> skills = new List<Skill>();
            skills.Add(new Skill("1", "Long"));
            skills.Add(new Skill("2", "Nhi"));

            foreach (var item in skills)
            {
                listBox1.Items.Add(item);
                listBox1.ValueMember = "skillId";
                listBox1.DisplayMember = "name";
            }

DisplayMember 显示到 listBox,但 ValueMember 未设置为 listBox 当我单击 ListBox 中的选定项目并单击按钮时,我正在打印

Console.WriteLine("value id listbox1:" + listBox1.SelectedValue);

但它什么都不显示

value id listbox1:

【问题讨论】:

  • 请阅读xyproblem.info并相应地编辑您的问题。
  • 我正在编辑我的问题,请再次检查并帮助我!
  • ValueMember 和 DisplayMember 旨在与 DataSource 一起使用,而不是 Items.Add(...)
  • 您从数据源中删除项目,而不是从列表框中。更喜欢BindingList&lt;T&gt; 而不是List&lt;T&gt;
  • @ĐứcLong 您刚才在评论中所说的话,您应该添加到问题中。因为虽然listBox1.DataSource = skills; 是一个合法的答案,但在您的情况下可能无法正常工作。但你的问题不包含这个细节。不是每个人都在回答之前阅读 cmets

标签: c# winforms


【解决方案1】:

答案是——你需要为此使用DataSourse 属性

listBox1.ValueMember = "skillId";
listBox1.DisplayMember = "name";
listBox1.DataSource = skills; // where skills  = List<Skill>

并确保最后设置DataSourse。它对性能有影响。

如果您需要删除项目,您可以使用 BindingList&lt;Skill&gt; 或不绑定到列表而是绑定到从该列表生成的数组 (LINQ) - skills.ToArray()。然后您可以随时从内存中的列表中删除项目,然后再次调用listBox1.DataSource = skills.ToArray()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多