标签:
建立一个WCF服务。
1 using ClassLibrary; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Runtime.Serialization; 6 using System.ServiceModel; 7 using System.ServiceModel.Web; 8 using System.Text; 9 using System.Xml; 10 11 namespace AreaService 12 { 13 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。 14 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。 15 public class Service1 : IService1 16 { 17 public static class api 18 { 19 public static XmlDocument cacheAreaDocument { get; set; } 20 public static XmlDocument cacheUrlMapDocument { get; set; } 21 } 22 public List<ClassLibrary.Area> GetProvince() 23 { 24 XmlDocument xd = api.cacheAreaDocument; 25 if (xd == null) 26 { 27 xd = new XmlDocument(); 28 xd.Load(AppDomain.CurrentDomain.BaseDirectory + "/data/ChinaArea.xml"); 29 } 30 XmlNode xn = xd.SelectSingleNode("area"); 31 List<Area> areas = new List<Area>(); 32 //等效于 XmlNode xn = xd.DocumentElement; 33 foreach (XmlNode province in xn.ChildNodes) 34 { 35 XmlElement proEl = (XmlElement)province; 36 areas.Add(new Area { province = proEl.GetAttribute("province"), provinceID = proEl.GetAttribute("provinceID") }); 37 } 38 return areas; 39 } 40 public List<ClassLibrary.Area> GetCityByProvinceId(string provinceID) 41 { 42 XmlDocument xd = api.cacheAreaDocument; 43 if (xd == null) 44 { 45 xd = new XmlDocument(); 46 xd.Load(AppDomain.CurrentDomain.BaseDirectory + "/data/ChinaArea.xml"); 47 } 48 XmlNode xn = xd.SelectSingleNode("area"); 49 List<ClassLibrary.Area> areas = new List<ClassLibrary.Area>(); 50 foreach (XmlNode province in xn.ChildNodes) 51 { 52 XmlElement pro = (XmlElement)province; 53 if (pro.GetAttribute("provinceID") == provinceID) 54 { 55 foreach (var cityNd in pro.ChildNodes) 56 { 57 XmlElement city = (XmlElement)cityNd; 58 areas.Add(new ClassLibrary.Area { City = city.GetAttribute("City"), CityID = city.GetAttribute("CityID") }); 59 } 60 } 61 } 62 if (xn.ChildNodes == null || xn.ChildNodes.Count <= 0) 63 { 64 areas.Add(new ClassLibrary.Area { City = "", CityID = "" }); 65 } 66 return areas; 67 } 68 69 public List<ClassLibrary.Area> GetPieceareaByCityID(string CityID) 70 { 71 List<Area> areas = new List<Area>(); 72 if (CityID.Trim() == "") 73 { 74 areas.Add(new Area { Piecearea = "", PieceareaID = "" }); 75 return areas; 76 } 77 XmlDocument xd = api.cacheAreaDocument; 78 if (xd == null) 79 { 80 xd = new XmlDocument(); 81 xd.Load(AppDomain.CurrentDomain.BaseDirectory + "/data/ChinaArea.xml"); 82 } 83 XmlNode xn = xd.SelectSingleNode("area"); 84 85 //等效于 XmlNode xn = xd.DocumentElement; 86 foreach (XmlNode province in xn.ChildNodes) 87 { 88 foreach (XmlNode cityNd in province.ChildNodes) 89 { 90 if ((cityNd as XmlElement).GetAttribute("CityID") == CityID) 91 { 92 foreach (var pieceareaNd in cityNd.ChildNodes) 93 { 94 XmlElement piecearea = (XmlElement)pieceareaNd; 95 areas.Add(new Area { Piecearea = piecearea.GetAttribute("Piecearea"), PieceareaID = piecearea.GetAttribute("PieceareaID") }); 96 } 97 } 98 99 } 100 } 101 return areas; 102 } 103 } 104 }
建立后生成。然后在前端添加服务引用。
实例化。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace 动态的获取省市 11 { 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 sa = new AreaService.Service1Client(); 18 } 19 AreaService.Service1Client sa; 20 private void Form1_Load(object sender, EventArgs e) 21 { 22 comboBox1.DataSource = sa.GetProvince(); 23 comboBox1.DisplayMember = "province"; 24 comboBox1.ValueMember = "provinceID"; 25 comboBox1_SelectedIndexChanged(sender,e); 26 comboBox2_SelectedIndexChanged(sender, e); 27 comboBox3_SelectedIndexChanged(sender, e); 28 29 } 30 /// <summary> 31 /// 获取市 32 /// </summary> 33 /// <param name="sender"></param> 34 /// <param name="e"></param> 35 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 36 { 37 comboBox2.DataSource = sa.GetCityByProvinceId(comboBox1.SelectedValue+""); 38 comboBox2.DisplayMember = "City"; 39 comboBox2.ValueMember = "CityID"; 40 } 41 42 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 43 { 44 comboBox3.DataSource = sa.GetPieceareaByCityID(comboBox2.SelectedValue+""); 45 comboBox3.DisplayMember = "Piecearea"; 46 comboBox3.ValueMember = "PieceareaID"; 47 } 48 49 50 private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) 51 { 52 53 } 54 55 private void button1_Click(object sender, EventArgs e) 56 { 57 58 } 59 60 61 } 62 }
这是窗体设计代码:
namespace 动态的获取省市
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.comboBox3 = new System.Windows.Forms.ComboBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(40, 50);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(29, 12);
this.label1.TabIndex = 0;
this.label1.Text = "省:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(40, 111);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(29, 12);
this.label2.TabIndex = 1;
this.label2.Text = "市:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(40, 175);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(29, 12);
this.label3.TabIndex = 2;
this.label3.Text = "区:";
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(87, 47);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(121, 20);
this.comboBox1.TabIndex = 3;
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// comboBox2
//
this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Location = new System.Drawing.Point(87, 108);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(121, 20);
this.comboBox2.TabIndex = 4;
this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged);
//
// comboBox3
//
this.comboBox3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox3.FormattingEnabled = true;
this.comboBox3.Location = new System.Drawing.Point(87, 172);
this.comboBox3.Name = "comboBox3";
this.comboBox3.Size = new System.Drawing.Size(121, 20);
this.comboBox3.TabIndex = 5;
this.comboBox3.SelectedIndexChanged += new System.EventHandler(this.comboBox3_SelectedIndexChanged);
//
// button1
//
this.button1.Location = new System.Drawing.Point(87, 226);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 6;
this.button1.Text = "确 定";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(261, 272);
this.Controls.Add(this.button1);
this.Controls.Add(this.comboBox3);
this.Controls.Add(this.comboBox2);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.ComboBox comboBox2;
private System.Windows.Forms.ComboBox comboBox3;
private System.Windows.Forms.Button button1;
}
}
效果如下:

标签:
原文地址:http://www.cnblogs.com/jason-davis/p/4497097.html