根据项目和子项目的文本查找 ListView 项目

Was*_*bee 4 .net c# listview winforms

我有listview2 个组(ONLINEOFFLINE)和两列(NameStatus)。

列表视图示例

这是我将项目添加到特定组的代码:

public void f2list(object group, string friend, string status)
{
        ListViewItem item = new ListViewItem(new string[] { friend, (string)status });
        GroupItem(item, group);
        this.ListView.Items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

object group定义将添加到哪个组项目OFFLINEONLINEstring friend定义朋友用户名,string status并且只是第二列Status

该代码的第二部分:

private void GroupItem(ListViewItem item, object group2)
{
        foreach (ListViewGroup group in this.ListView.Groups)
        {
            if (group.Header == (string)group2)
            {
                item.Group = group;
                break;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

所以,我需要以某种方式在这两个组之间移动项目或从列表中删除项目namestatus以便它可以再次添加到另一个组中。

我知道selected当我点击它时如何删除它,但是当其他类或函数调用“移动该特定项目/将该特定项目分配给另一个组”时该怎么做?

f2list是由 another 调用的public void AddUserToList,但这只是分配文本f2list(group,username,status);(例如f2list("ONLINE","Joe","Hey i am online!");,还检查是否username已存在以防止重复项。

如何在组之间移动项目取决于调用了哪些组f2list(group, ...?这group是预定义的OFFLINEONLINE

因此,当Nameaka 上username线以显示listview并分组ONLINE时,但当他/她下线时,则分配到另一个组OFFLINE

附加信息:此代码仅适用于将项目添加到列表中。但是如何在这两个组之间移动项目?甚至从组所在的列表中删除项目OFFLINEONLINE

编辑此外,当我手动删除selected项目时,此项目将正确更改组。

编辑 2这些项目是通过添加这些项目来timer检查其他用户是否在线或离线的。

Rez*_*aei 5

使用 FindItemWithText 查找项目

要查找Item基于Text的项目,您可以使用FindItemWithText

var item = this.listView1.FindItemWithText("item text");
Run Code Online (Sandbox Code Playgroud)

您还可以使用其他签名在搜索中包含子项:

var item = this.listView1.FindItemWithText("", true, 0);
Run Code Online (Sandbox Code Playgroud)

使用 Linq 查找项目

同样要执行自定义搜索,您可以使用Linq方法。例如:

var item = this.listView1.Items.Cast<ListViewItem>()
                .Where(x => (x.Text == "Some Text" ||
                       x.SubItems[1].Text == "Some Text") &&
                       x.Group.Name=="group1" )
                .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

找组

创建组时,为组分配合适的名称,然后按名称查找它们。注意Name不同于HeaderText。要按名称查找组,您可以:

var group = this.listView1.Groups["group1"];
Run Code Online (Sandbox Code Playgroud)

将项目移动到组

要将 an 移动Item到 a Group,只需找到该项目并找到您想要的组,然后只需将该组分配给 的Group属性即可Item

item.Group = group;
Run Code Online (Sandbox Code Playgroud)