ListBox上的项目显示为类名

彼得

问题如下:我使用属性将关联到ListBox一些自定义类(List<Person> persons = new List<Person>()的元素列表DataSource当然ValueMemberDisplayMember都分配给该类的适当属性。当我第一次加载数据时,一切看起来都很好。但是,当我单击某个项目(即从1开始从第7位开始)然后重新构建列表时,元素数量少于7个,结果我在列表上看不到正确的文本。而是,每个项目都显示为一个类名,后跟名称空间。

换句话说,而不是列表:

  • 约翰·杜
  • 简·多伊
  • 其他人

我看到了:

  • MyNamespace.Person
  • MyNamespace.Person
  • MyNamespace.Person

看来取决于最后一个SelectedIndex如果不再有具有该索引的项目(项目更少),则会出现问题。

我尝试了重新分配ValueMember和的不同组合DisplayMember,以及将nullDataSource分配给列表属性并将列表重新分配给此属性,甚至尝试SelectedIndex在解除绑定之前将-1分配给,但是它们都没有帮助。

[编辑]

我被要求显示一些代码。我将粘贴相关片段:

1.班级人员:

public class Person
{
    private int id;
    private string name;

    public Person(int m_id, string m_name)
    {
        id = m_id;
        name = m_name;
    }

    public int Id
    {
        get
        {
            return id;
        }
    }

    public string Name
    {
        get
        {
            return name;
        }
    }
}`

2.在以下形式的构造函数中:

List<Person> persons = new List<Person>();

3.在buton1上触发的方法中,单击:

listBox1.DataSource = null;    // this is optional. Commenting this line out doesn't help
persons.Add(new Person(1, "John Doe"));
persons.Add(new Person(2, "Jane Doe"));
persons.Add(new Person(3, "Somebody Else"));
listBox1.ValueMember = "Id";
listBox1.DisplayMember = "Name";
listBox1.DataSource = persons;

4.在buton2上触发的方法中,单击:

listBox1.DataSource = null;    // this is optional. Commenting this line out doesn't help
persons.Add(new Person(1, "Person One"));
persons.Add(new Person(2, "Person Two"));
listBox1.ValueMember = "Id";
listBox1.DisplayMember = "Name";
listBox1.DataSource = persons;

当我单击button1时,列表框已填充,并且一切正常。当我选择最后一个项目(“ Somebode Else”)然后按一下button2时,列表框将显示2个相同的项目:“ MyNamespace.Person”。

[编辑2-表格的完整代码]

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace MyNamespace
{
    public partial class Form1 : Form
    {
        private List<Person> persons = new List<Person>();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            persons.Clear();
            persons.Add(new Person(1, "John Doe"));
            persons.Add(new Person(2, "Jane Doe"));
            persons.Add(new Person(1, "Somebody Else"));
            listBox1.DataSource = null;
            listBox1.ValueMember = "Id";
            listBox1.DisplayMember = "Name";
            listBox1.DataSource = persons;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            persons.Clear();
            persons.Add(new Person(1, "Person One"));
            persons.Add(new Person(2, "Person Two"));
            listBox1.DataSource = null;
            listBox1.ValueMember = "Id";
            listBox1.DisplayMember = "Name";
            listBox1.DataSource = persons;
        }
    }

    class Person
    {
        private int id;
        private string name;

        public Person(int m_id, string m_name)
        {
            id = m_id;
            name = m_name;
        }

        public int Id
        {
            get
            {
                return id;
            }
        }

        public string Name
        {
            get
            {
                return name;
            }
        }

        public string ToString()
        {
            return id + ". " + name;
        }
    }
}

重现此问题的步骤:

  1. 运行表格
  2. 点击按钮1
  3. 选择列表上的最后一个位置(“ Somebody Else”)
  4. 单击按钮2

如果您在列表中选择“ John Doe”或“ Jane Doe”,则一切正常。重建列表后所选索引无效时,似乎“崩溃”。我想这是一些错误。

Tinstaafl

当一个设置DataSourcenull它清除DisplayMember值。因此,要解决此问题,请设置新的设置DataSource问题消失。

listBox1.DataSource = null;    // this is optional. Commenting this line out doesn't help
persons.Add(new Person(1, "John Doe"));
persons.Add(new Person(2, "Jane Doe"));
persons.Add(new Person(3, "Somebody Else"));
listBox1.DataSource = persons;
listBox1.DisplayMember = "Name";

否则,在Person类中重写该ToString方法以确保如果DataMember为空,则将显示正确的属性

public class Person
{
    private int id;
    private string name;

    public Person(int m_id, string m_name)
    {
        id = m_id;
        name = m_name;
    }

    public int Id
    {
        get
        {
            return id;
        }
    }

    public string Name
    {
        get
        {
            return name;
        }
    }
    public override string ToString()
    {
        return name;
    }
}

这样,无论何时将列表框数据源设置为列表List<Person>框,都将自动使用ToString方法作为显示。使用selectedItem属性仅仅是铸造它作为人的事,(Person)listBox1.SelectedItem

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React-仅在变量为true时显示类名

来自分类Dev

如果 ResourceDictionary 放置在 ListBox DataTemplate 上的 UserControl 内,它是否为每个项目加载它?

来自分类Dev

发送的项目在Exchange 2016(Windows 10)上显示为草稿

来自分类Dev

如何在ReactJS上为组件对象设置类名?

来自分类Dev

将 ListBox 中的项目排序为 Int

来自分类Dev

根据用户操作显示/隐藏ListBox项目

来自分类Dev

Intellij,在文件/类的项目导航视图中将内部类显示为类的成员

来自分类Dev

仅根据类将列表中的项目显示为列,具体取决于类

来自分类Dev

类名上的hasattr

来自分类Dev

Maven项目:Java类不会显示为Java源代码吗?

来自分类Dev

Maven项目显示为路径

来自分类Dev

我如何通过单击在 owl 滑块中的项目上显示我自己的活动类

来自分类Dev

UWP GridViewItem 显示类名

来自分类Dev

在弹性项目上显示表格

来自分类Dev

无法使项目显示在画布上

来自分类Dev

在弹性项目上显示表格

来自分类Dev

在Heroku上构建VS2013 F#项目失败,并显示“所需属性“项目”在导入中为空”

来自分类Dev

当DataTemplate为Button时,ListBox项目返回字符串

来自分类Dev

为每个项目XAML C#创建Listbox.ItemTemplate

来自分类Dev

在ViewModel中通过属性MaxNumberOfVisibleItems显示ListBox中的项目?

来自分类Dev

如何使类标签显示为类的列名?

来自分类Dev

如何使类标签显示为类的列名?

来自分类Dev

没有触发我的 ListBox 项目上的 DoubleClick

来自分类Dev

Pascal:如何从ListBox1中选择项目以在listBox 2中显示结果?

来自分类Dev

WooCommerce:添加类名来分页项目

来自分类Dev

为ListBox1中的每个项目做点什么,然后将项目添加到listbox2 vb

来自分类Dev

在GridView中将布局显示为项目

来自分类Dev

如何创建为显示而计算的NotesRichtext项目?

来自分类Dev

使 Treepanel 将 extjs 项目显示为子项

Related 相关文章

  1. 1

    React-仅在变量为true时显示类名

  2. 2

    如果 ResourceDictionary 放置在 ListBox DataTemplate 上的 UserControl 内,它是否为每个项目加载它?

  3. 3

    发送的项目在Exchange 2016(Windows 10)上显示为草稿

  4. 4

    如何在ReactJS上为组件对象设置类名?

  5. 5

    将 ListBox 中的项目排序为 Int

  6. 6

    根据用户操作显示/隐藏ListBox项目

  7. 7

    Intellij,在文件/类的项目导航视图中将内部类显示为类的成员

  8. 8

    仅根据类将列表中的项目显示为列,具体取决于类

  9. 9

    类名上的hasattr

  10. 10

    Maven项目:Java类不会显示为Java源代码吗?

  11. 11

    Maven项目显示为路径

  12. 12

    我如何通过单击在 owl 滑块中的项目上显示我自己的活动类

  13. 13

    UWP GridViewItem 显示类名

  14. 14

    在弹性项目上显示表格

  15. 15

    无法使项目显示在画布上

  16. 16

    在弹性项目上显示表格

  17. 17

    在Heroku上构建VS2013 F#项目失败,并显示“所需属性“项目”在导入中为空”

  18. 18

    当DataTemplate为Button时,ListBox项目返回字符串

  19. 19

    为每个项目XAML C#创建Listbox.ItemTemplate

  20. 20

    在ViewModel中通过属性MaxNumberOfVisibleItems显示ListBox中的项目?

  21. 21

    如何使类标签显示为类的列名?

  22. 22

    如何使类标签显示为类的列名?

  23. 23

    没有触发我的 ListBox 项目上的 DoubleClick

  24. 24

    Pascal:如何从ListBox1中选择项目以在listBox 2中显示结果?

  25. 25

    WooCommerce:添加类名来分页项目

  26. 26

    为ListBox1中的每个项目做点什么,然后将项目添加到listbox2 vb

  27. 27

    在GridView中将布局显示为项目

  28. 28

    如何创建为显示而计算的NotesRichtext项目?

  29. 29

    使 Treepanel 将 extjs 项目显示为子项

热门标签

归档