【问题标题】:How to attach reference of an object to a ListView item?如何将对象的引用附加到 ListView 项?
【发布时间】:2019-08-14 14:10:07
【问题描述】:

我目前正在构建一个 Windows 窗体应用程序来列出 SQL 数据库中的所有客户端。查询完所有客户后,我将它们显示在 ListView 中,允许用户单击其中一个客户以获取更多信息。如何将我的“客户”对象的引用附加到列表视图中的项目,以便在单击时恢复此特定对象?

我尝试使用listView的索引,唯一的问题是我有一个过滤功能(搜索),使用时会混淆客户端的顺序。

public class Client
    {
        public string _name;
        public int _id;

        public Client(string name, int id)
        {
            _name = name;
            _id = id;
        }
    }

public Form1()
    {
        public Client[10] clients;
        for (int i = 0; i < 10; i++)
        {
            Client[i] = new Client(i.ToString(), i);
        }

        InitializeComponent();

        foreach (Client client in clients)
        {
            ListViewItem item = new ListViewItem(client._name);
            item.Tag = client;
            ClientListView.Items.Add(item);
        }
    }

private void ClientListView_SelectedIndexChanged(object s, EventArgs e)
    {
            if (clientListView.SelectedItems.Count == 1)
            {
                var item = clientListView.SelectedItems[0];
                Client client = (Client)item.Tag;
            }
    }

这个解决方案只在选择一个项目时创建一个新的客户端对象,有没有办法指向包含在客户端数组中的原始对象?可能是通过引用传递,但是好像不行,可能标签不是很好的解决方案……

【问题讨论】:

  • ListViewItem 有一个 Tag 属性,它是对象。
  • 代码和你的文字不匹配。要么你不明白你的代码是做什么的,要么你复制了错误的代码?
  • 你认为Client client = (Client)item.Tag;在做什么,为什么不是你想要的(“指向包含在clients数组中的原始对象”)?
  • 如果您正在处理来自数据库的数据,DataGrtidView 和几行代码来实现数据绑定将比 ListView 简单得多 - 并且所有内容都不会转换为文本。
  • 谢谢@nvoigt,我想使用客户端客户端 = (Client)item.Tag;会创建一个新对象,但似乎不是。

标签: c# winforms listview


【解决方案1】:

每个 winforms 控件 (System.Windows.Forms.Control) 都有一个 Tag 变量,它是一个对象 (System.Object)。这意味着您可以对标签进行任何引用。 例如:

Client client = new Client();
btn = new Button();
btn.Tag = client;

然后,您可以通过另一种方法使用该标签。

Client oldClient = btn.Tag as Client;

当然你可以使用(Client)btn.Tag,但对我来说btn.Tag as Client更容易使用,并且可以在其他人的代码上看到。

P.S:它不会在代码开始时创建一个与客户端相同数据的新客户端。它保存的是引用(对象在应用程序内存中的位置),而不是数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2012-05-21
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多