繁体   English   中英

在ListView中选择多行项目

[英]selecting Multiple row of items in a ListView

我有一个treeview,它是详细视图。 listview填充有4行中成对关联的项和子项。 我已经将这4个项目中的每一行的Name属性设置为相同。

我要寻找的是,当用户选择一行时,具有相似“名称”属性的所有4行将被自动选择(加亮)。

到目前为止,我所做的是在下面,但是无法编译!

private void resultSheet_SelectedIndexChanged(object sender, EventArgs e)
{
    string name = resultSheet.SelectedItems[0].Name.ToString();

    ListView.ListViewItemCollection items = new ListView.ListViewItemCollection(resultSheet);

    foreach (ListViewItem item in resultSheet.Items)
    {
        if (item.Name.ToString() == name) 
        {
            items.Add(item);
        }
    }

    resultSheet.SelectedItems = items; //Does not compile 

}

ListView.SelectedItems是只读的。

if(resultSheet.SelectedItems.Count >= 1)
{
    string name = resultSheet.SelectedItems[0].Name.ToString();
    foreach (ListViewItem item in resultSheet.Items)
    {
        item.Selected = item.Name.ToString() == name; 
    }
}

编辑 :根据您对另一个答案的评论:在访问索引0处的项目之前,请确保SelectedItems.Count >= 1 ,因为“无选择”也是可能的状态。 当您选择另一个项目时,ListView在选择新项目之前取消选择SelectedItem。

如果要避免不必要的SelectedIndexChanged事件,请尝试使用Robert的Timer-ListView方法此Application.Idle方法 (VB.NET,但易于转换),它是由ObjectListView用来防止多个事件触发的。

只需以这种方式更改您的方法:

 bool inAction = false;

 private void resultSheet_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (inAction || (resultSheet.SelectedItems.Count == 0))
     {
         return;
     }
     inAction = true;
     string name = resultSheet.SelectedItems[0].Name;

     foreach (ListViewItem item in resultSheet.Items)
     {
         if (item.Name.ToString() == name)
         {
             item.Selected = true;
         }
     }
     inAction = false;
 } 

编辑:或者,如果您喜欢LINQ,请按照以下步骤操作:

 bool inAction = false;

 private void resultSheet_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (inAction || (resultSheet.SelectedItems.Count == 0))
     {
         return;
     }
     inAction = true;
     string name = resultSheet.SelectedItems[0].Name;

     foreach (ListViewItem item in resultSheet.Items.OfType<ListViewItem>().Where(item => item.Name == name))
     {
         item.Selected = true;
     }
     inAction = false;
 } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM