首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ASP.NET查询生成的SQL树视图

问从ASP.NET查询生成的SQL树视图
EN

Stack Overflow用户
提问于 2012-10-12 01:00:28
回答 2查看 2.8K关注 0票数 0

我目前有一个查询,它将一个数据表返回到C#中,它的结构如下:

代码语言:javascript
复制
ID | ParentID | ParentOfParentID | Name

我想要做的是创建一个函数,将这个返回的System.Data.DataTable链接到ASP.NET树视图,这样我就可以得到所描述的结构--但到目前为止我还没有成功。

任何帮助都将不胜感激--任何比ASP更“好”的树状视图也会很有帮助!(因为我不太喜欢ASP的那个)。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-10-12 01:03:21

我写了一篇关于如何做到这一点的博客:

http://weblogs.asp.net/stevewellens/archive/2009/01/01/from-table-to-treeview-displaying-hierarchies.aspx

我不知道为什么你有ParentOfParentID,这似乎是多余的,并且会使移动节点到不同的父节点非常困难。

票数 1
EN

Stack Overflow用户

发布于 2015-02-07 03:37:07

在下面的代码中," Node“类代表数据库中的一行(不包括将数据库行转换为Node类对象的代码)。

TreeView将如下所示

代码语言:javascript
复制
<asp:TreeView ID="TreeView1" runat="server" 
onselectednodechanged="TreeView1_SelectedNodeChanged" 
ontreenodecollapsed="TreeView1_TreeNodeCollapsed" 
ontreenodeexpanded="TreeView1_TreeNodeExpanded">
<SelectedNodeStyle BackColor="#FFFFCC" />
</asp:TreeView>

代码后面的页面如下。方法"getTreeMenu()“返回要显示的节点集合

代码语言:javascript
复制
public class Node
    {
        public int Id;
        public string text;
        public bool IsParent;
        public int parentId;
        public string url;
        public bool IsSelected;
        public bool IsExpanded = false;
    }

    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        List<Node> lstNodes = new List<Node>();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
              bindTree();
            }
        }

        TreeNode searchResult;
        public void SelectNodesRecursive(string searchValue, TreeView Tv)
        {
            foreach (TreeNode tn in Tv.Nodes)
            {
                if (tn.Value == searchValue)
                {
                    searchResult = tn;
                    break;
                }

                if (tn.ChildNodes.Count > 0)
                {
                    foreach (TreeNode cTn in tn.ChildNodes)
                    {
                        int a = SelectChildrenRecursive(cTn, searchValue);
                        if (a == 1)
                        {
                            searchResult = cTn;
                        }
                    }
                }
            }
        }


        private int SelectChildrenRecursive(TreeNode tn, string searchValue)
        {
            if (tn.Value == searchValue)
            {
                searchResult = tn;
                return 1;
            }

            if (tn.ChildNodes.Count > 0)
            {
                foreach (TreeNode tnC in tn.ChildNodes)
                {
                    int a = SelectChildrenRecursive(tnC, searchValue);
                    if (a == 1)
                    {
                        searchResult = tnC;
                        return 1;
                    }

                }

            }
            searchResult = null;
            return 0;
        } 


        private void bindTree()
        {
            TreeNode parent = null, child = null;

            if (Session["TreeNodes"] == null)
            {
                lstNodes = getTreeMenu();
                Session["TreeNodes"] = lstNodes;
            }
            else
            {
                lstNodes = (List<Node>)Session["TreeNodes"];
            }

            foreach (Node node in lstNodes)
            {
                if (node.IsParent && node.parentId == 0)
                {
                    parent = new TreeNode { Text = node.text, Value = node.Id.ToString()};
                    TreeView1.Nodes.Add(parent);
                    parent.Selected = node.IsSelected;
                    parent.Expanded = node.IsExpanded;
                }
                else
                {
                    if (node.IsParent)
                    {
                        SelectNodesRecursive(node.parentId.ToString(), TreeView1);
                        parent = searchResult;
                        child = new TreeNode { Text = node.text, Value = node.Id.ToString()};
                        parent.ChildNodes.Add(child);
                        child.Selected = node.IsSelected;
                        child.Expanded = node.IsExpanded;
                    }
                    else
                    {
                        child = new TreeNode { Text = node.text, Value = node.Id.ToString()};
                        SelectNodesRecursive(node.parentId.ToString(), TreeView1);
                        parent = searchResult;

                        if (parent != null)
                        {
                            parent.ChildNodes.Add(child);
                            child.Selected = node.IsSelected;
                            child.Expanded = node.IsExpanded;
                        }
                        else
                        {
                            child.Selected = node.IsSelected;
                            child.Expanded = node.IsExpanded;
                        }
                    }
                }
            } 
        }

        private List<Node> getTreeMenu()
        {
            List<Node> treeSource = new List<Node>();
        treeSource.Add(new Node { Id = 1, IsParent = true, parentId = 0, text = "parent1", url = "home.aspx?id=1", IsExpanded = true });
        treeSource.Add(new Node { Id = 2, IsParent = false, parentId = 1, text = "Child 1", url = "page1.aspx" });
        treeSource.Add(new Node { Id = 3, IsParent = false, parentId = 1, text = "Child 2", url = "Page2.aspx" });
        treeSource.Add(new Node { Id = 4, IsParent = false, parentId = 1, text = "Child 3", url = "Page3.aspx" });
        treeSource.Add(new Node { Id = 5, IsParent = true, parentId = 0, text = "parent 2", url = "home.aspx?id=5", IsExpanded = false });
        treeSource.Add(new Node { Id = 6, IsParent = false, parentId = 5, text = "child 1", url = "page1.aspx" });
        treeSource.Add(new Node { Id = 7, IsParent = true, parentId = 5, text = "parent 3", url = "home.aspx?id=7", IsExpanded=false });
        treeSource.Add(new Node { Id = 14, IsParent = false, parentId = 7, text = "child 1", url = "page1.aspx" });
        treeSource.Add(new Node { Id = 15, IsParent = false, parentId = 7, text = "child 2", url = "page2.aspx" });
        treeSource.Add(new Node { Id = 8, IsParent = false, parentId = 5, text = "child 3", url = "Page3.aspx" });
        treeSource.Add(new Node { Id = 9, IsParent = true, parentId = 0, text = "parent 4", url = "home.aspx?id=9", IsExpanded = false });
        treeSource.Add(new Node { Id = 10, IsParent = false, parentId = 9, text = "child 1", url = "page1.aspx" });
        treeSource.Add(new Node { Id = 11, IsParent = false, parentId = 9, text = "child 2", url = "Page2.aspx" });
        treeSource.Add(new Node { Id = 12, IsParent = false, parentId = 9, text = "child 3", url = "Page3.aspx" });
        treeSource.Add(new Node { Id = 13, IsParent = true, parentId = 0, text = "parent 5", url = "About.aspx" });
        return treeSource;
        }

        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            string selVal = TreeView1.SelectedValue;
            lstNodes = (List<Node>)Session["TreeNodes"];
            if (lstNodes != null)
            {
                Node nd = lstNodes.Find(n => n.Id.ToString() == selVal);

                foreach (Node item in lstNodes.FindAll(n => n.Id.ToString() != selVal))
                {
                    item.IsSelected = false;
                }

                nd.IsSelected = true;
                Session["TreeNodes"] = lstNodes;
                if (nd.url != "")
                    Response.Redirect(nd.url);
            }
        }

        protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
        {   
            lstNodes = (List<Node>)Session["TreeNodes"];
            if (lstNodes != null)
            {
                Node nd = lstNodes.Find(n => n.Id.ToString() == e.Node.Value);
                nd.IsExpanded = true;
                Session["TreeNodes"] = lstNodes;
            } 
        }

        protected void TreeView1_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
        {
            lstNodes = (List<Node>)Session["TreeNodes"];

            if (lstNodes != null)
            {
                Node nd = lstNodes.Find(n => n.Id.ToString() == e.Node.Value);
                nd.IsExpanded = false;
                Session["TreeNodes"] = lstNodes;
            }
        }
    }

如果你有任何问题,请告诉我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12844766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档