惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Scott Helme
Scott Helme
N
Netflix TechBlog - Medium
AI
AI
Security Latest
Security Latest
GbyAI
GbyAI
P
Proofpoint News Feed
Y
Y Combinator Blog
A
Arctic Wolf
G
Google Developers Blog
U
Unit 42
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
T
Tor Project blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
Latest news
Latest news
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
WordPress大学
WordPress大学
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
The Hacker News
The Hacker News
Simon Willison's Weblog
Simon Willison's Weblog
V
V2EX
Project Zero
Project Zero
博客园_首页

博客园 - Jingnan

微信支付开发 c# SDK JSAPI支付开发的流程和微信大坑 T4模板根据数据库表和列的Description生成代码的summary的终极解决方案 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程一 平台介绍 wcf几种调用方式的性能讨论 WCF同样功能不同写法的性能问题 ASP.NET 4.0 URL路由改进支持 WPF 用webBowser 嵌套 URL地址 显示ReportViewer导出EXCEL的一些问题 简单的封装一个HTML 弹出对话框的空间 原型模式(Prototype) 恶性代码 - Jingnan - 博客园 AdvDataList分页 例码 问一个关于生成静态页面的问题 简单读区XML - Jingnan - 博客园 ASP.NET实现新闻页面的分页功能[生成静态版] 更新 增加 用Table形式
使用XMLDataSource简单实现多级下拉菜单
Jingnan · 2008-03-26 · via 博客园 - Jingnan

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

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

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

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

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

<form id="form1" runat="server">
    
<div>
        
<label>省  份</label>
        
<asp:DropDownList ID="Provinces" runat="server" DataSourceID="ProvinceList" DataTextField="Name" DataValueField="PostalCode" OnSelectedIndexChanged="Provinces_SelectedIndexChanged" AutoPostBack="True">
        
</asp:DropDownList><asp:XmlDataSource ID="ProvinceList" runat="server" DataFile="~/incxml/State.xml"
            XPath
="China/Province"></asp:XmlDataSource>
        
<label>城  市</label>
        
<asp:DropDownList ID="Cities" runat="server" AutoPostBack="True" OnSelectedIndexChanged="Cities_SelectedIndexChanged">
        
</asp:DropDownList><asp:XmlDataSource ID="CityList" runat="server" DataFile="~/incxml/State.xml"
            XPath
="China/Province/City"></asp:XmlDataSource>
        
<label>区  县</label>
        
<asp:DropDownList ID="County" runat="server">
        
</asp:DropDownList><asp:XmlDataSource ID="CountyList" runat="server" DataFile="~/incxml/State.xml"
            XPath
="China/Province/City/county"></asp:XmlDataSource>
    
</div>
    
</form>

省份和城市列表的OnSelectedIndexChanged事件,指定相应列表的DataSourceID属性即可,同时把相应的XMLDataSource的XPath属性更改

protected void Provinces_SelectedIndexChanged(object sender, EventArgs e)
    
{
        CityList.XPath 
= "China/Province[@PostalCode=" + Provinces.SelectedValue + "]/City";
        Cities.DataSourceID 
= "CityList";
        Cities.DataTextField 
= "Name";
        Cities.DataValueField 
= "PostalCode";
    }

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