仿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

  

 

posted @ 2013-11-20 10:32  stevejson  阅读(299)  评论(0编辑  收藏  举报