2013-03-15 101 views
0

我想搜索一个具有四列的现有ListView并在全新的ListView中输出搜索结果。以下是我迄今:搜索/查询ListView并将结果打印到新的ListView中

 private void qryBtn_Click(object sender, EventArgs e) 
    { 
     var results = listResx.Items.Cast<ListViewItem>() 
      .Where(x => x.Text.Contains(textQuery.Text)); 

     foreach (var d in results) 
     { 
      listQuery.Items.Add(d.ToString()); 
     } 
    } 
+0

现有解决方案的问题是什么? – 2013-03-15 15:12:19

回答

1

如果你想比什么每个项目的所有四列到搜索这样的应招:

var results = listResx.Items.Cast<ListViewItem>() 
     .Where(x => x.Subitems.Cast<ListViewItem.ListViewSubItem>() 
        .Any(si => si.Text.Contains(textQuery.Text) 
      ); 

results然后将包含ListViewItems查询文本与任何子项匹配。据我记得,子项目的集合也包括项目的文本。

要将这些作为完整列表项目插入到其他列表视图中,您必须为结果枚举中的每个项目创建一个新的ListViewItem,因为您无法同时在两个不同的列表视图中插入相同的ListViewItem:

foreach (var d in results) 
{ 
    ListViewItem lvi = new ListViewItem(); 
    foreach(ListViewItem.ListViewSubItem si in d.SubItems) 
    { 
     lvi.SubItems.Add(si.Text); 
    } 
    listQuery.Items.Add(lvi); 
} 
+0

谢谢!这让我更靠近了一步,但如果有任何子项符合查询,我想显示整行。就目前来看,所有显示的内容都是满足查询的行的第一列。 – rbelliv 2013-03-15 15:33:49

+0

请参阅更新。您必须为每个结果创建一个新的列表视图项目,因为您不能同时在两个列表中创建相同的listviewitem .. – 2013-03-15 15:42:43

+0

'lvi.Add'似乎是不正确的语法:( – rbelliv 2013-03-15 15:51:34