将DataTable绑定到TreeView而不进行迭代

时间:2013-02-26 06:33:27

标签: c# asp.net arrays datatable treeview

我能够将数据表列绑定到Gridview

在这里,我从数据表中的列中选择Distinct Values并将它们插入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 个答案:

答案 0 :(得分:1)

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

由于@IamStalker表示注释,内部WinForms绑定控制机制中存在迭代:迭代数据以填充TreeView没有任何问题。

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

要只进行一次迭代,您应该更改LINQ,如下所示(将var替换为string []并删除.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();