Asp.Net2.0中的导航功能(二)--导航控件的实现


如何将siteMap/XML格式的导航文件中的内容显示在导航控件中,是这篇文章的主要内容。这里面的工作并不难,只要按照下面的步骤实现就可以
一、实现导航控件与siteMap文件的协同操作
1、创建siteMap文件
//web.sitemap文件的内容
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="china.aspx" title="中国" description="">
      <siteMapNode url="shandong.aspx" title="山东" description="">
        <siteMapNode url="default9.aspx" title="济南">
          <siteMapNode url="site.aspx?id=0100" title="平阴"></siteMapNode>
          <siteMapNode url="site.aspx?id=0101" title="历城"></siteMapNode>
          <siteMapNode url="site.aspx?id=0102" title="章丘"></siteMapNode>
        </siteMapNode>
        <siteMapNode url="qingdao.aspx" title="青岛"></siteMapNode>
        <siteMapNode url="yantai.aspx" title="烟台"></siteMapNode>
      </siteMapNode>

      <siteMapNode url="jiangsu.aspx" title="江苏" description="">
        <siteMapNode url="nanjing.aspx" title="南京"></siteMapNode>
        <siteMapNode url="suzhou.aspx" title="苏州"></siteMapNode>
      </siteMapNode>
      <siteMapNode url="liaoning.aspx" title="辽宁">
        <siteMapNode url="shenyang.aspx" title="沈阳"></siteMapNode>
        <siteMapNode url="dalian.aspx" title="大连"></siteMapNode>
      </siteMapNode>
    </siteMapNode>
</siteMap>
siteMap文件的文件名一般为web.sitemap,因为后面的SiteMapDataSource会自动嗅探web.sitemap文件作为要显示的文件。
2、将SiteMapDataSource控件放入页面
3、将导航控件放入页面,设置其DataSourceId属性为第2步中的SiteMapDataSource控件的ID
效果如下:

上面是menu的效果

上面是sitemap的效果
上面是treeview的效果

二、实现导航控件与自定义的XML文件实现协同操作
1、创建自定义的XML文件
//work.xml文件
<?xml version="1.0" encoding="utf-8" ?>
<root url="top.aspx" name="计算机书目">
<type url="type.aspx?id=0" name="办公类">
    <book url="book.aspx?id=0" name="Windows应用"></book>
    <book url="book.aspx?id=1" name="Office快速入门"></book>
</type>
<type url="type.aspx?id=1" name="编程类">
    <book url="book.aspx?id=2" name="C语言程序设计"></book>
    <book url="book.aspx?id=3" name="Java从入门到精通"></book>
    <book url="book.aspx?id=4" name="Asp.Net入门经典"></book>
</type>
<type url="type.aspx?id=2" name="网络类">
    <book url="book.aspx?id=5" name="网络基础"></book>
    <book url="book.aspx?id=6" name="TCP/IP协议"></book>
</type>
<type url="type.aspx?id=3" name="动画类">
    <book url="book.aspx?id=7" name="PhotoShop创意设计"></book>
    <book url="book.aspx?id=8" name="3D Max景观设计"></book>
    <book url="book.aspx?id=9" name="Maya影视动画初步"></book>
</type>
</root>
从上面的文件内容能看出XML与SiteMap文件的差异。
2、把XMLDataSource控件放入页面,并指定要访问的XML文件
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/work.xml"></asp:XmlDataSource>
3、把导航控件放入页面,并进行绑定设置
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1">
    <DataBindings>
        <asp:TreeNodeBinding DataMember="root" NavigateUrlField="url" TextField="name" />
        <asp:TreeNodeBinding DataMember="type" NavigateUrlField="url" TextField="name" />
        <asp:TreeNodeBinding DataMember="book" NavigateUrlField="url" TextField="name" />
    </DataBindings>
</asp:TreeView>


如此就可以实现导航控件对自定义XML文件的访问了

三、用树形控件实现对数据库数据的加载
这里我没有找到SiteMapDataSource控件访问SQLServer数据库的简便方法,只好用SQLDataSource与导航控件搭配使用,实现对数据库中数据的加载。
有知道如何使用SiteMapDataSource控件访问数据库中表的朋友希望能够赐教。
这里用到的知识点是“递归”
1、创建数据表
create table computer
(
    ids varchar(10) primary key,
    name varchar(50),
    parent varchar(10)
)
go
insert into computer(ids,name) values('p001','计算机配件')
insert into computer(ids,name,parent) values('p002','处理器','p001')
insert into computer(ids,name,parent) values('p003','主板','p001')
insert into computer(ids,name,parent) values('p004','硬盘','p001')
insert into computer(ids,name,parent) values('p005','Intel处理器','p002')
insert into computer(ids,name,parent) values('p006','AMD处理器','p002')
insert into computer(ids,name,parent) values('p007','华硕主板','p003')
insert into computer(ids,name,parent) values('p008','联想主板','p003')
insert into computer(ids,name,parent) values('p009','希捷硬盘','p004')
insert into computer(ids,name,parent) values('p010','迈拓硬盘','p004')
insert into computer(ids,name,parent) values('p011','Intel酷睿系列','p005')
insert into computer(ids,name,parent) values('p012','Intel奔腾系列','p005')
insert into computer(ids,name,parent) values('p013','希捷80G','p009')
insert into computer(ids,name,parent) values('p014','希捷160G','p009')
select * from computer
2、将SQLDataSource控件放入页面
<asp:SqlDataSource ID="sd" runat="server" ConnectionString="<%$ConnectionStrings:conn1 %>"></asp:SqlDataSource>
3、将树形控件放入页面
<asp:TreeView ID="TreeView1" runat="server"></asp:TreeView>
4、编写程序加载数据表中的数据
private void select(TreeNodeCollection nodes, DataView dv)
    {
        if (dv.Count <= 0)
            return;
        for (int i = 0; i < dv.Count; i++)
        {
            TreeNode tn = new TreeNode(dv[i]["name"].ToString());
            nodes.Add(tn);
            sd.SelectCommand = "select * from computer where parent='" + dv[i]["ids"].ToString() + "'";
            DataView d = ((DataView)sd.Select(DataSourceSelectArguments.Empty));
            select(tn.ChildNodes, d);
           
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            sd.SelectCommand = "select * from computer where parent is null";
            sd.DataSourceMode = SqlDataSourceMode.DataSet;
            sd.Select(DataSourceSelectArguments.Empty);
            DataView dv = ((DataView)sd.Select(DataSourceSelectArguments.Empty));
            select(TreeView1.Nodes, dv);
        }
    }
    此方法麻烦一些,而且递归代码对初学者不太好理解。
   

    四、使用SiteMapDataSource对任意名称的sitemap文件进行访问
    有的时候我们的导航地图文件不只一个web.sitemap,或者名称不一定叫web.sitemap,那如何实现SiteMapDataSource 控件对地图文件的访问呢?
    1、创建sitemap文件并命名为custom.sitemap
    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
        <siteMapNode url="page.aspx?id=0" title="华育国际" description="">
            <siteMapNode url="page.aspx?id=1" title="天安门校区" description="" />
            <siteMapNode url="page.aspx?id=2" title="中关村校区" description="" />
          <siteMapNode url="page.aspx?id=3" title="济南校区" description="" >
            <siteMapNode url="page.aspx?id=4" title="校长室"></siteMapNode>
            <siteMapNode url="page.aspx?id=5" title="教学部"></siteMapNode>
            <siteMapNode url="page.aspx?id=6" title="就业部"></siteMapNode>
          </siteMapNode>
            <siteMapNode url="page.aspx?id=" title="青岛校区" description="" />
        </siteMapNode>
    </siteMap>
    2、在配置文件中进行如下配置  
    <system.web>

    <siteMap defaultProvider="custom" enabled ="true">
      <providers>
        <add name="custom" siteMapFile="custom.sitemap" type="System.Web.XmlSiteMapProvider"></add>
      </providers>
    </siteMap>

   
    3、将SiteMapDataSource 控件放入页面
    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
   
    4、将导航控件放入页面,并设置DataSourceId
     <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1"></asp:TreeView>
posted @ 2010-09-17 09:52  英雄不问出处  阅读(306)  评论(0编辑  收藏  举报