我是asp.net中TreeView的新手,所以关于填充节点的任何帮助都会很棒。
我有一个由SQLAdapter填充的DataTable。它包含:
-House- -Region- -Division- Aurora House Arizona Central Copper Hills Arizona Central Arbor House DFW Central Angelina House Timberland West
我想知道如何放置数据或创建一个与此类似的TreeView:
Selection Corporate Division Region House(s)
我花了很多时间研究如何做到这一点,我只是无法绕过它我不知道它的数据是否在DataTable中使得它更难做到。
这一切都将基于用户是否可以访问特定的公司/部门/地区/房屋,因此我希望TreeView for admin显示所有内容,但其他人只显示他们有权访问的内容。
我不认为这会成为一个问题,只要我得到填充数据表正确的SQL。我关心的还有重复的区域/部门,我怎么也只让它们出现一次而不是多次出现?
谢谢你的帮助。
尼克
答案 0 :(得分:0)
基本上,理想情况下,您希望有一个对象(好吧,集合)模仿您想要在树视图中呈现的层次结构。
我假设数据库中的列表与您在问题中提供的列表一样,我假设“选择”列包含
也许您可以使用Linq来创建这样的分层集合。或许你甚至不需要创建那个集合 - 也许你可以继续开始构建树视图,当你使用 - 例如 - linq和一些循环来迭代数据记录时。
可能有一些更优雅的方式,但这样的事情应该有效:
var selections = dt.Select(r => Convert.ToString(r["Selection"])).Distinct().ToList();
foreach (string selection in selections)
{
// create treeview node here; add to treeview
object selectionNode = null; // change type to treeview node type
var corporateList = dt.Where(r => Convert.ToString(r["Selection"]) == selection).Select(r => Convert.ToString(r["Corporate"])).Distinct().ToList();
foreach (string corporate in corporateList)
{
// create treeview node here; add it as a child to selectionNode
object corporateNode = null; // change type to tv node
var divisions = dt.Where(r => Convert.ToString(r["Selection"]) == selection && Convert.ToString(r["Corporate"]) == corporate).Select(r => Convert.ToString(r["Division"])).Distinct().ToList();
foreach (string div in divisions)
{
// create treeview node here; add it as a child to corporateNode
}
}
}
答案 1 :(得分:0)
您可以像这样动态创建TreeView控件:
let myPrint = putStrLn . show
myPrint ("Hello World!")
<interactive>:171:10:
Couldn't match expected type `()' with actual type `[Char]'
In the first argument of `myPrint', namely `("hello Wordl!")'
In the expression: myPrint ("hello Wordl!")
In an equation for `it': it = myPrint ("hello Wordl!")
在这种情况下,我的TreeView Control只有两个级别,但您可以根据需要嵌套。