【发布时间】: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;会创建一个新对象,但似乎不是。