打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
采用递归算法为TreeView控件加载节点(节点信息保存于SqlServer) ASP.Net相...

通常TreeView控件的节点数据是使用xml文件保存于Web目录下的,可以使用XmlDataSource进行数据绑定,那么如果将节点数据保存与数据库中,怎样读取数据才最简单高效呢?

下面的图片是数据库中的一张数据表,保存了一个网站上TreeView控件的节点信息

【NodeId 】为标识列 自动增长

【DisplayName】为节点文本

【ParentNodeId】为对应的父节点的Id

【NavigateUrl】为节点对应的Url地址

页面后置代码如下:

public partial class TreeViewTest : System.Web.UI.Page
{
    DataTable table;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)//如果页面是首次加载
        {
            SqlConnection conn = new SqlConnection("【数据库连接字符串】");
            SqlDataAdapter sda=new SqlDataAdapter("select * from 【表名】",conn);
            table = new DataTable();
            sda.Fill(table);
            ShowTreeView("0",null);
        }
    }

    private void ShowTreeView(string nodeId,TreeNode nodeTemp)
    {
        DataView dv=new DataView(table);
        dv.RowFilter = "parentNodeId =" + nodeId;

        foreach(DataRowView drv in dv)
        {
            TreeNode node=new TreeNode();
            node.Text=drv["DisplayName"].ToString();
            node.Value=drv["NodeId"].ToString();
            node.NavigateUrl=drv["NavigateUrl"].ToString();
            if (nodeId == "0")
            {
                TreeView1.Nodes.Add(node);
            }
            else
            {
                nodeTemp.ChildNodes.Add(node);
            }
            ShowTreeView(node.Value, node);//自己调用自己,递归算法
        }
    }


    protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
    {
        TreeNode node = e.Node;
        CheckChildNode(node);
        CheckParentNode(node);
    }

    private void CheckChildNode(TreeNode node)
    {
        foreach (TreeNode tempNode in node.ChildNodes)
        {
            tempNode.Checked = node.Checked;
            if (tempNode.ChildNodes.Count > 0)
            {
                CheckChildNode(tempNode);
            }
        }
    }

    private void CheckParentNode(TreeNode node)
    {
        if (node.Parent != null)
        {
            TreeNode nodeTemp = node.Parent;
            nodeTemp.Checked = node.Checked;
            if (nodeTemp.Parent != null)
            {
                CheckParentNode(nodeTemp);
            }
        }
    }
}

在页面文件中加入如下script脚本:(要在TreeView控件之上,最好写在<head>中)

<script type="text/javascript">
    function checkNode(){
        var obj=window.event.srcElement;
        if(obj.tagName=="INPUT" && obj.type=="checkbox")
        {
            form1.submit();
        }
    }
    </script>

方法:private void ShowTreeView()就是加载TreeView控件的方法


这里的TreeView控件加入了复选框,所以又添加了两个方法:

1 private void CheckParentNode() 【选中或取消当前节点的所有父节点】

2 private void CheckChildNode() 【选中或取消当前节点的所有子节点】

实际开发中在界面层是不会连接数据库的,所以可以将该表作为一个实体,在数据访问层中返回该实体类型的集合,然后在界面进行加载

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
递归示例(二):WinForm之TreeView的应用
TreeView CheckBox勾选联动
分享个人总结VB.NET多线程
vb.net入门:TreeView控件的使用
DOTNETBAR的使用方法(转)
TreeView,TreeNode,TreeNodeCollection
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服