使用XMLDataSource简单实现多级下拉菜单

以前用asp的时候写过多级关联的下拉菜单,比如大类别、小类别,选择省份、显示城市等,那时候要用Javascript写个函数,论效率应该比XMLDataSource高,页面也不用返回服务器。今天把省份城市乡镇写成XML,用XMLDataSource绑定asp:DropDownList为了尝尝鲜。

    我这中间还有个插曲。在网上找了很长时间,都没有找到。竟然没有中国省份城市的XML文档,我晕,难道我自己写啊,省份31个,下面的城市,县城??。最后找到国家统计局的网站,有2005最新的行政划分,只有HTML格式的,用XSL转?还不会(别鄙视,那个网页也很不标准)。保存成文本,一行行改?太累了。找个工具吧?txt2xml?开源社区有一个,好不容易找到链接down下来,发现必须装JDK。MD,就没有个exe程序啊!面对那3000多行的文本,我怎么整理成XML啊,郁闷。当时就想,我要是开发个简单的txt2xml或许也能火起来,哈哈,不错的工具。或许很有难度的说。此事日后再议!

     1. 有自己的XML了。格式如下:

None.gif <? xml version="1.0" encoding="utf-8" standalone="yes"  ?>
None.gif
< China >
None.gif  
< Province  Name ="北京市"  PostalCode ="110000" >
None.gif    
< City  Name ="市辖区"  PostalCode ="110100" >
None.gif      
< county  Name ="东城区"  PostalCode ="110101" />
None.gif      
< county  Name ="西城区"  PostalCode ="110102" />
None.gif      
< county  Name ="崇文区"  PostalCode ="110103" />
None.gif      dot.gifdot.gifdot.gif.
None.gif      
< county  Name ="怀柔区"  PostalCode ="110116" />
None.gif      
< county  Name ="平谷区"  PostalCode ="110117" />
None.gif    
</ City >
None.gif    
< City  Name ="县"  PostalCode ="110200" >
None.gif      
< county  Name ="密云县"  PostalCode ="110228" />
None.gif      
< county  Name ="延庆县"  PostalCode ="110229" />
None.gif    
</ City >
None.gif  
</ Province >
None.gif  
< Province  Name ="天津市"  PostalCode ="120000" >
None.gif    
< City  Name ="市辖区"  PostalCode ="120100" >
None.gif      
< county  Name ="和平区"  PostalCode ="120101" />
None.gif     dot.gifdot.gifdot.gif..
None.gif      
< county  Name ="西青区"  PostalCode ="120111" />
None.gif      
< county  Name ="津南区"  PostalCode ="120112" />
None.gif      
< county  Name ="北辰区"  PostalCode ="120113" />
None.gif      
< county  Name ="武清区"  PostalCode ="120114" />
None.gif      
< county  Name ="宝坻区"  PostalCode ="120115" />
None.gif    
</ City >
None.gif    
< City  Name ="县"  PostalCode ="120200" >
None.gif      
< county  Name ="宁河县"  PostalCode ="120221" />
None.gif      
< county  Name ="静海县"  PostalCode ="120223" />
None.gif      
< county  Name ="蓟县"  PostalCode ="120225" />
None.gif    
</ City >
None.gif  
</ Province >
None.gif
</ China >
None.gif

2. 建立三个DropDownList (AutoPostBack为True)和三个XmlDataSource ,省份列表直接绑定即可。

None.gif<form id="form1" runat="server">
None.gif    
<div>
None.gif        
<label>省  份</label>
None.gif        
<asp:DropDownList ID="Provinces" runat="server" DataSourceID="ProvinceList" DataTextField="Name" DataValueField="PostalCode" OnSelectedIndexChanged="Provinces_SelectedIndexChanged" AutoPostBack="True">
None.gif        
</asp:DropDownList><asp:XmlDataSource ID="ProvinceList" runat="server" DataFile="~/incxml/State.xml"
None.gif            XPath
="China/Province"></asp:XmlDataSource>
None.gif        
<label>城  市</label>
None.gif        
<asp:DropDownList ID="Cities" runat="server" AutoPostBack="True" OnSelectedIndexChanged="Cities_SelectedIndexChanged">
None.gif        
</asp:DropDownList><asp:XmlDataSource ID="CityList" runat="server" DataFile="~/incxml/State.xml"
None.gif            XPath
="China/Province/City"></asp:XmlDataSource>
None.gif        
<label>区  县</label>
None.gif        
<asp:DropDownList ID="County" runat="server">
None.gif        
</asp:DropDownList><asp:XmlDataSource ID="CountyList" runat="server" DataFile="~/incxml/State.xml"
None.gif            XPath
="China/Province/City/county"></asp:XmlDataSource>
None.gif    
</div>
None.gif    
</form>
None.gif
省份和城市列表的OnSelectedIndexChanged事件,指定相应列表的DataSourceID属性即可,同时把相应的XMLDataSource的XPath属性更改
None.gifprotected void Provinces_SelectedIndexChanged(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        CityList.XPath 
= "China/Province[@PostalCode=" + Provinces.SelectedValue + "]/City";
InBlock.gif        Cities.DataSourceID 
= "CityList";
InBlock.gif        Cities.DataTextField 
= "Name";
InBlock.gif        Cities.DataValueField 
= "PostalCode";
ExpandedBlockEnd.gif    }

None.gif    
protected void Cities_SelectedIndexChanged(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        CountyList.XPath 
= "China/Province[@PostalCode=" + Provinces.SelectedValue + "]/City[@PostalCode=" + Cities.SelectedValue + "]/county";
InBlock.gif        County.DataSourceID 
= "CountyList";
InBlock.gif        County.DataTextField 
= "Name";
InBlock.gif        County.DataValueField 
= "PostalCode";
ExpandedBlockEnd.gif    }

None.gif

转载于:https://www.cnblogs.com/sujingnan/archive/2008/03/26/1122679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值