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

时间:2016-05-06 14:03:08

标签: c# .net winforms listview

listview有两个小组(ONLINEOFFLINE)和两个小组(NameStatus)。

ListView Example

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

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);
}

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;
            }
        }
}

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

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

f2list由另一个public void AddUserToList调用,但这仅用于分配f2list(group,username,status);之类的文字(例如。f2list("ONLINE","Joe","Hey i am online!");)以及检查username是否f2list(group, ...已经存在,以防止双重项目。

如何在组之间移动项目取决于group中调用哪些组?此OFFLINE已预定义为ONLINEName

因此,当username又名listview联机以显示在ONLINE和群组OFFLINE中,但当他/她离线时,则分配到另一个群组OFFLINE

其他信息:此代码仅适用于向列表中添加项目。但是如何在这两组之间移动物品?或者甚至从列表中ONLINEselected

中删除项目

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

编辑2 这些项目由private final Map<Class, Consumer<String>> actions = new HashMap<>(); 添加,用于检查其他用户是在线还是离线。

1 个答案:

答案 0 :(得分:2)

使用FindItemWithText查找项目

要根据Item项目查找Text,您可以使用FindItemWithText

var item = this.listView1.FindItemWithText("item text");

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

var item = this.listView1.FindItemWithText("", true, 0);

使用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();

查找论坛

创建组时,为组指定合适的名称,然后按名称查找它们。注意NameHeaderText不同。要按名称查找组,您可以:

var group = this.listView1.Groups["group1"];

将项目移至群组

要将Item移至Group,只需找到该项目并找到所需的群组,然后只需将该群组分配到Group属性{ {1}}:

Item