C# 无需迭代即可将DataTable绑定到TreeView
我能够将Datatable列绑定到Gridview 在这里,我从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
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语句将返回LINQIEnumerable
,而不是字符串[]。这样,它将只在填充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