仿Windows制作TreeView数据加载

  时间有限就直接贴源码吧,理解思路即可。

页面代码:

<asp:TreeView ID="TreeViewLeft" runat="server" ShowLines="True" ExpandDepth="2" 
     Target="mainFrame" ontreenodeexpanded="TreeViewLeft_TreeNodeExpanded1">
</asp:TreeView>

.cs文件代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            AddNode(6160);  //父节点Id
        }
    }
    #region 页面加载时,加载第0级和第1级节点
    private void AddNode(int parentId)
    {
        string UserId = HttpContext.Current.Session["zhy_UserId"].ToString();
        //通过传进来的参数,得到数据集
        string strSQL = "select * from "
                + "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
                + "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
                + "FROM [zhy_AdminMenu] "
                + "WHERE [ClassID] = 0 And DeleteSign=0 AND [IsPublic] IN (0,1) AND IsStage=2 AND [PARENTID]=@parentId) as a "
                + "where  [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
                + "ORDER BY [ParentID] ASC, [Sort] DESC ";
        if (Session["IsProgrammer"].ToString() == "1")
        {
            strSQL = "select * from "
                + "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
                + "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
                + "FROM [zhy_AdminMenu] "
                + "WHERE [ClassID] = 0 And DeleteSign=0 AND IsStage=2 AND [PARENTID]=@parentId) as a "
                + "where [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
                + "ORDER BY [ParentID] ASC, [Sort] DESC ";
        }
        SqlParameter[] paras = new SqlParameter[]{
                                                        new SqlParameter("@parentId",parentId)
                                                     };
        //Response.Write(strSQL);
        //Response.End();
        DataSet ds = GetDataSet(strSQL, paras);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            if ((int)ds.Tables[0].Rows[i]["IsPublic"] != 1 && (int)ds.Tables[0].Rows[i]["IsPublic"] != 2)
            {
                if (zhyPurview.PageRegionValidateRolesUnallow(ds.Tables[0].Rows[i]["RolesUnallow"].ToString(), UserId))
                {
                    ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
                    i--;
                }
                else if (!zhyPurview.PageRegionValidateRolesAllow(ds.Tables[0].Rows[i]["RolesAllow"].ToString(), UserId) && !zhyPurview.PageRegionValidateUsersAllow(ds.Tables[0].Rows[i]["UsersAllow"].ToString(), UserId))
                {
                    ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
                    i--;
                }
            }
        }

        //循环遍历,加载所有0级节点和1级节点
        foreach (DataRow Row in ds.Tables[0].Rows)
        {
            TreeNode Node = new TreeNode();
            Node.Text = Row["Name"].ToString();
            Node.SelectAction = TreeNodeSelectAction.Expand;

            Node.Value = Row["id"].ToString();
            Node.NavigateUrl = Row["HyperLinkPage"].ToString();
            if (Row["Target"].ToString() == "1")
            {
                Node.Target = "_blank";
            }
            TreeViewLeft.ExpandDepth = 0;
            TreeViewLeft.Nodes.Add(Node);
            AddChildNodes(Node);    //再次递归
        }
    }
    #endregion

    #region 增加子节点
    public void AddChildNodes(TreeNode pNode)
    {
        string UserId = HttpContext.Current.Session["zhy_UserId"].ToString();
        //通过传进来的参数,得到所有子节点的数据集
        string strSQL = "select * from "
                + "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
                + "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
                + "FROM [zhy_AdminMenu] "
                + "WHERE [ClassID] = 0 And DeleteSign=0 AND [IsPublic] IN (0,1) AND IsStage=2 AND [PARENTID]=@parentId) as a "
                + "where  [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
                + "ORDER BY [ParentID] ASC, [Sort] DESC ";
        if (Session["IsProgrammer"].ToString() == "1")
        {
            strSQL = "select * from "
                + "(SELECT id,PageRegionId,Name, HyperLinkPage,Target,ParentID, [RolesAllow],IsPublic, "
                + "[RolesUnallow], [UsersAllow], (',' + [UsersUnallow]) as [UsersUnallow],[Sort] "
                + "FROM [zhy_AdminMenu] "
                + "WHERE [ClassID] = 0 And DeleteSign=0 AND IsStage=2 AND [PARENTID]=@parentId) as a "
                + "where [UsersUnallow] is null or ([UsersUnallow] is not null and [UsersUnallow] not like '%" + "," + UserId + "," + "%') "
                + "ORDER BY [ParentID] ASC, [Sort] DESC ";
        }
        SqlParameter[] paras = new SqlParameter[]
                {
                    new SqlParameter("@parentId",pNode.Value)
                };
        DataSet ds = GetDataSet(strSQL, paras);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            if ((int)ds.Tables[0].Rows[i]["IsPublic"] != 1 && (int)ds.Tables[0].Rows[i]["IsPublic"] != 2)
            {
                if (zhyPurview.PageRegionValidateRolesUnallow(ds.Tables[0].Rows[i]["RolesUnallow"].ToString(), UserId))
                {
                    ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
                    i--;
                }
                else if (!zhyPurview.PageRegionValidateRolesAllow(ds.Tables[0].Rows[i]["RolesAllow"].ToString(), UserId) && !zhyPurview.PageRegionValidateUsersAllow(ds.Tables[0].Rows[i]["UsersAllow"].ToString(), UserId))
                {
                    ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[i]);
                    i--;
                }
            }
        }

        foreach (DataRow Row in ds.Tables[0].Rows)
        {
            TreeNode Node = new TreeNode();
            Node.Value = Row["id"].ToString();
            Node.Text = Row["Name"].ToString();

            Node.SelectAction = TreeNodeSelectAction.Expand;
            Node.NavigateUrl = Row["HyperLinkPage"].ToString();
            if (Row["Target"].ToString() == "1")
            {
                Node.Target = "_blank";
            }
            pNode.ChildNodes.Add(Node);
            pNode.NavigateUrl = "";
        }
    }
    #endregion

    #region 通过sql语句,得到数据集
    public static DataSet GetDataSet(string strSQL, params SqlParameter[] values)
    {
        try
        {

            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["NMXT_DBConn"].ToString()))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = strSQL;
                cmd.CommandTimeout = 60;
                cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
        }
        catch (Exception ex)
        {
            throw new Exception(values[0].Value + "——" + strSQL);
        }
    }
    #endregion

    #region 当点击第0级节点的时候,加载第1级的所有子节点

    protected void TreeViewLeft_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        foreach (TreeNode subNode in e.Node.ChildNodes)
        {
            if (subNode.ChildNodes.Count <= 0)
            {
                AddChildNodes(subNode);
            }
        }
    }

    #endregion

  

 

转载于:https://www.cnblogs.com/stevenjson/p/3432917.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值