Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无需迭代即可将DataTable绑定到TreeView_C#_Asp.net_Arrays_Datatable_Treeview - Fatal编程技术网

C# 无需迭代即可将DataTable绑定到TreeView

C# 无需迭代即可将DataTable绑定到TreeView,c#,asp.net,arrays,datatable,treeview,C#,Asp.net,Arrays,Datatable,Treeview,我能够将Datatable列绑定到Gridview 在这里,我从datatable中的列中选择不同的值,并将它们插入到TreeView中 string[] menuGroup = ((from DataRow row1 in _ds.Tables["Rest_grdvitems"].Rows orderby row1["Menu_Group"] select row1["Menu_Group"].ToString

我能够将Datatable列绑定到Gridview

在这里,我从datatable中的列中选择不同的值,并将它们插入到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);
           }
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();
因为我没有很多行要插入到TreeView中,所以我需要避免迭代

你能告诉我吗?

树视图(或列表视图)不能直接绑定到数据源

正如@iamstapper以注释的形式指出的,内部WinForms绑定控制机制中存在迭代:在数据中迭代以填充树视图没有什么错

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);
           }
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();
如果您主要关心的是性能,那么您应该确保使用
.BeginUpdate
()和
.EndUpdate()
方法封装添加节点的代码:它将在填充操作期间锁定TreeView显示刷新。这仅适用于WinForms树视图

要只进行一次迭代,您应该按如下所示更改LINQ(使用var而不是字符串[]并删除.ToArray()。因此,LINQ语句将返回LINQ
IEnumerable
,而不是字符串[]。这样,它将只在填充TreeView的foreach循环中枚举

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);
           }
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();

你认为dataseource没有使用foreach吗?我不知道?你能解释一下吗?很难比较,因为TreeView没有实现通常的WinForms数据绑定机制。但是,由于迭代字符串数组的速度非常快,因此不需要太多担心。请尝试一下:将BeginUpdate()和EndUpdate()应用到TreeView真的很有帮助。谢谢。您能提供一种不使用循环将Datatable列放置到字符串数组的方法吗??我的代码很好,但是我已经有了不同的值。所以我需要直接将它们放到String数组或treeview?是的,有一种方法可以通过返回LINQ表达式而不是数组来删除第一个LINQ循环。我编辑了我的答案。+1用于使用
IEnumerable
而不是
ToArray()。
:P