2013-03-15 98 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