在ASP.NET中填充TreeView对象

时间:2012-01-26 21:31:40

标签: asp.net treeview

我是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。我关心的还有重复的区域/部门,我怎么也只让它们出现一次而不是多次出现?

谢谢你的帮助。
尼克

2 个答案:

答案 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只有两个级别,但您可以根据需要嵌套。