2013-02-26 24 views
2

我能到DataTable列绑定到GridView的绑定的DataTable到TreeView控件没有迭代

在这里,我在数据表中选择不同值氟里昂一列,并将其插入到TreeView控件。

string[] menuGroup = ((from DataRow row1 in _ds.Tables["Rest_grdvitems"].Rows 
         orderby row1["Menu_Group"] 
        select row1["Menu_Group"].ToString()).Distinct()).ToArray(); 

      TreeNode node = new TreeNode("All Items"); 
      TV_Categories_List.Nodes.Add(node); 
      foreach (string menuitem in menuGroup) 
      { 
       TreeNode node1 = new TreeNode(menuitem); 
       TV_Categories_List.Nodes.Add(node1); 
      } 

因为我有大量的行插入TreeView,我需要避免迭代。

你能帮我吗?

+1

您认为datasese不是使用foreach吗? – IamStalker 2013-02-26 06:37:12

+0

我不知道?你可以解释吗? – 2013-02-26 06:39:45

回答

1

TreeView(也不是ListView)不能直接绑定到DataSource。

由于@IStStalker声明为注释,因此在内部WinForms绑定控制机制中存在迭代:迭代数据以填充TreeView没有任何问题。

如果你主要关心的是性能,那么你应该确保你附加添加节点的代码.BeginUpdate()和.EndUpdate()方法:它将在填充操作期间锁定TreeView显示刷新。这只适用于WinForms TreeView

要只有一个迭代,你应该改变LINQ如下(把var而不是string []和remove .ToArray())。所以LINQ语句将返回一个LINQ IEnumerable<string>而不是一个字符串[]。这样,它只会在填充TreeView的foreach循环中枚举。

var menuGroup = (from DataRow row1 in _ds.Tables["Rest_grdvitems"].Rows 
       orderby row1["Menu_Group"] 
       select row1["Menu_Group"].ToString()).Distinct(); 

TreeNode node = new TreeNode("All Items"); 

TV_Categories_List.BeginUpdate(); 

TV_Categories_List.Nodes.Add(node); 
foreach (string menuitem in menuGroup) 
{ 
    TreeNode node1 = new TreeNode(menuitem); 
    TV_Categories_List.Nodes.Add(node1); 
} 

TV_Categories_List.EndUpdate(); 
+0

然后将性能与数据绑定相同? – 2013-02-26 06:45:46

+0

很难比较,因为TreeView没有实现通常的WinForms数据绑定机制。但是,因为迭代一个字符串数组是一个非常快速的场景,所以不必担心。请尝试一下这个方法:将BeginUpdate()和EndUpdate()应用到TreeView真的有所作为。 – Larry 2013-02-26 06:53:06

+0

谢谢。你能否提供一种将Datatable列放入字符串数组而不使用循环的方法?我有的代码很好,但我已经有了Distinct值。所以我直接需要把它们放到String数组或treeview中? – 2013-02-26 06:55:19

相关问题