母版页 treeview控件 SiteMapPath控件 treeview数据库绑定模式

 母版页就是网站中一样的部分
母版页的后缀名是.Master
可以把母版页当成一个页面  想让哪里是别的内容就可以  通过如下:
 
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
       
</asp:ContentPlaceHolder>
//相当于占位符 想改哪里占据哪里!
如果要创建带母版页的Web窗体  右击新建项即可

同样的 我们可以在母版页中添加JQUERY的引用 这样我们就可以在子页面中写入工厂函数的代码

如果套用母版页,控件的ID值会发生变化

这是Html生成的代码 
解决方案:

JavaScript:    var obj = document.getelementbyid("<%Label1.ClientID%>");
Jquery:     $('#<%Label1.ClientID%>')

TreeView 绑定 XML
需要XmlDataSource控件,再设置TextField,NavigateUrlField 属性

SiteMapPath 站点地图控件
我们可以把它放到母版页
这个控件只能绑定Xml 其文件路径在项目根目录 名称为Web.sitemap
 
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
   <siteMapNode url="/default.aspx" title="第三波书店"  description="第三波书店">
       <siteMapNode url="" title="第二章"  description="" >
         <siteMapNode url="/chp02/login.aspx" title="登录"></siteMapNode>
         <siteMapNode url="/chp02/SessionLogin.aspx" title="Sesson学习"></siteMapNode>
       </siteMapNode>
        <siteMapNode url="" title="第四章"  description="" >
          <siteMapNode url="/chp04/webForm1.aspx" title="母版页一"></siteMapNode>
          <siteMapNode url="/chp04/webForm2.aspx" title="母版页二"></siteMapNode>
          <siteMapNode url="/chp04/webForm3.aspx" title="站点地图"></siteMapNode>
          <siteMapNode url="/chp04/ZzhDemo.aspx" title="呵呵"></siteMapNode>
       </siteMapNode>
   </siteMapNode>
</siteMap>
​

  



                                                                                                     TreeView数据来源 表设计

                                                                         

  parentNodeid与nodeid对应 parentnodeid 0 的话就是根目录, 代码如下
    
 
public partial class BingTreeView : System.Web.UI.Page
   {
       //也可以使用list泛型集合
       DataTable dt = new DataTable();
       protected void Page_Load(object sender, EventArgs e)
       {
          //  foreach(DataRow row in dt.Rows)
         //  {
          //     SysFun fun = new SysFun()
           //    {
            //       NodeId = Convert.ToInt32(row["nodeId"]),
            //       DisplayName = row["DisplayName"].ToString(),
            //       DisplayOrder = Convert.ToInt32(row["DisplayOrder"]),
            //       ParentNodeId = Convert.ToInt32(row["ParentNodeId"]),
            //       NodeUrl = row["nodeUrl"].ToString()
            //   };
             //  list.Add(fun);
         //  }
           string sql = "select * from [SysFun]";
           dt = SQLHelper.ExcuteTable(sql,null).Tables[0];
           BindTree("0",TreeView1.Nodes);  //参数:(从头开始  根节点)
       }
       public void BindTree(string parentId,TreeNodeCollection tnc)
       {
           DataView dv = dt.DefaultView;           //返回可用于筛选的集合
           dv.RowFilter = "parentNodeId="+parentId;  //筛选出符合treeview规则的dv
           foreach (DataRowView row in dv)
           {
               TreeNode newtn = new TreeNode();         //声明treenode
               newtn.Text = row["Displayname"].ToString();
               newtn.NavigateUrl = row["NodeUrl"].ToString();
               newtn.Value = row["NodeId"].ToString();
               tnc.Add(newtn);
               BindTree(newtn.Value,newtn.ChildNodes);//继续回调 找完继续找parentNodeId(方法结束继续Foreach)
           }
       }
   }

  


分析:回调的方法是为了添加一个根目录的所有子集 添加完一个根节点的所有子集 foreach就会结束,那么方法执行就会结束,再次回到非回调的方法中 继续加载,直到所有根节点的子集全部加载完 ,此时bindtree方法就会结束。
     
原文地址:https://www.cnblogs.com/ZaraNet/p/9433775.html