现在的位置: 首页 > 综合 > 正文

用Linq找TreeView底下的東西

2012年02月26日 ⁄ 综合 ⁄ 共 1743字 ⁄ 字号 评论关闭

最近拿Linq出來玩,看怎麼用它去查詢TreeView裡的東西,可以下查詢條件,找出TreeView底下的Nodes是否有符合的Text或是其它屬性,這次就試著用Linq來找看看~

 

比如說TreeView長的像下面這個樣子,要怎麼去找出符合我們輸入的關鍵字.

image

剛開始試的時候,就遇到一個問題,如果我用下面的寫法,那麼只會找該層的Nodes,子Nodes就不會去找.

1 var nodes = from TreeNode chi in treeView1.Nodes
2                    where chi.Text.ToUpper().Contains(textBox1.Text.ToUpper())
3                    select chi;

看樣子似乎沒辨法直接這麼去找,除非treeView1能夠一次return全部的Nodes,只好從邏輯面著手去完成.

01 private void button1_Click(object sender, EventArgs e)
02 {
03     if (textBox1.Text.Length == 0) 
04     
05         MessageBox.Show("請輸入查詢條件"); 
06         textBox1.Focus(); 
07         return
08     }
09   
10     this.Cursor = Cursors.WaitCursor;
11     treeView1.BeginUpdate();
12       
13     treeView1.CollapseAll();
14     int Cnt = 0;
15     FindNode(treeView1.Nodes, ref Cnt);
16     treeView1.EndUpdate();
17   
18     this.Cursor = Cursors.Default;
19       
20     MessageBox.Show(string.Format("找到 {0} 筆", Cnt));
21 }
22   
23 private void FindNode(TreeNodeCollection treeNodeCollection, ref int Count)
24 {
25     var undoRedNode = from TreeNode chi in treeNodeCollection
26                       where chi.ForeColor == Color.Red
27                       select chi;
28   
29     foreach (TreeNode tn in undoRedNode)
30     {
31         tn.ForeColor = Color.Black;
32     }
33   
34     var nodes = from TreeNode chi in treeNodeCollection
35                 where chi.Text.ToUpper().Contains(textBox1.Text.ToUpper())
36                 select chi;
37   
38     foreach (TreeNode tn in nodes)
39     {
40         treeView1.SelectedNode = tn;
41         tn.Expand();
42         Count++;
43         tn.ForeColor = Color.Red;
44     }
45   
46   
47     foreach (TreeNode tn in treeNodeCollection)
48     {
49         if (tn.GetNodeCount(false) > 0)
50         {
51             FindNode(tn.Nodes, ref Count);
52         }
53     }
54   
55 }

 

這麼一來,只要輸入查詢條件去查詢,就可以將符合條件的Node展開,並改為紅色的字.

抱歉!评论已关闭.