【问题标题】:Find ListView Items based on text of items and sub items根据项目和子项目的文本查找 ListView 项目
【发布时间】:2016-05-06 14:03:07
【问题描述】:

我有 listview 2 组(ONLINE 和 OFFLINE)和两列(Name 和 Status)。

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 定义将添加到哪个组项 OFFLINE 或 ONLINE , string 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;
            }
        }
}

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

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

这个f2list 被另一个public void AddUserToList 调用,但这只是为了分配像f2list(group,username,status); 这样的文本(例如f2list("ONLINE","Joe","Hey i am online!"); 并检查username 是否已经存在以防止双重项目。

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

所以当Name aka username 上线显示在listview 和组ONLINE 但是当他/她下线时然后分配到另一个组OFFLINE?

其他信息:此代码仅在将项目添加到列表时才能正常工作。但是如何在这两组之间移动项目?或者甚至从组为OFFLINE 或ONLINE 的列表中删除项目?

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

EDIT 2 这些项目由timer 添加,它会检查其他用户是在线还是离线。

【问题讨论】:

  • 您要更改所选项目的组吗?
  • @RezaAghaei 不是 selected 项目,例如。鼠标单击,我想更改通过例如 FindByText 方法或类似方法找到的项目组。
  • 只需通过方法或用户点击找到该项目,然后将项目的Group属性设置为合适的值。有什么问题?
  • @RezaAghaei 问题是我不熟悉多列列表视图(我从未使用过)所以我不确定如何通过Name 查找项目,以及如何搜索/过滤Name仅在 ONLINE 或 OFFLINE 组中,不在整个列表视图中,仅在组中。 :/ 编辑:我可以使用此代码GoupItem 更改项目组,但它不会显示更改的项目,它将保持第一次添加到列表时的状态。
  • 我为您分享了一些有用的方法。要查找项目,请找到一个组并将项目移动到一个组。

标签: c# .net winforms listview


【解决方案1】:

使用 FindItemWithText 查找项目

要根据项目的Text 查找Item,您可以使用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();

查找群组

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

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

将项目移动到组中

要将Item 移动到Group,只需找到项目并找到所需的组,然后只需将组分配给Item 的Group 属性即可:

item.Group = group;

【讨论】:

  • 这其实很简单。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2018-10-11
  • 1970-01-01
  • 2014-12-15
相关资源
最近更新 更多