C#用ComboBox控件实现省与市的联动效果的方法

本文实例讲述了C#用ComboBox控件实现省与市的联动效果的方法。分享给大家供大家参考。具体实现方法如下:

代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

using System.Configuration;

namespace 省市联动

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Tsql.GetConnection();

using (SqlConnection conn = new SqlConnection(Tsql.GetConnection()))

{

conn.Open();

using (SqlCommand cmd = conn.CreateCommand())

{

cmd.CommandText = “select * from promary”;

using (SqlDataReader dr = cmd.ExecuteReader())

{

while (dr.Read())

{

Province pr = new Province();

pr.proID = dr.GetInt32(dr.GetOrdinal(“proID”));  //这里要特别注意数据库字段的类型 proID在数据库里是int型

pr.proName = dr.GetString(dr.GetOrdinal(“proName”));

comboBox1.Items.Add(pr);//pr是一个Province对象。Province有一个proName和proID属性。我将一个对象填充到comboBox1里。再让comboBox1的DisplayMember属性设置proName。【也就是让comboBox1显示pr对象的proName属性】。这样在填充市级城市的时候我就可以找到当前选择项comboBox1.SelectedItem(或者当前选择对象)所对应的proID

}

}

}

comboBox1.SelectedIndex = 0;  //将comcomboBox1的默认选项设为0

}

}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)

{

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

comboBox2.Items.Clear(); //在选择的时候先清空一下combox1里面的所以项,以免在更换省名的时候,与先前对应的省名下的市没有删除。

Province tem = (Province)comboBox1.SelectedItem; // 因为在comboBox1.Items.Add(pr)里添加的是对象。所以在这里讲comBox1所选中的当前对象赋给tem对象 (tem对象下面有两个属性 proName和proID)

int id = tem.proID;  //将当前选中对象的的proID赋值给id,给下面的sql查询语句使用

Tsql.GetConnection();// 获取数据库连接字符串。

using (SqlConnection conn = new SqlConnection(Tsql.GetConnection()))

{

conn.Open();

using (SqlCommand cmd = conn.CreateCommand())

{

cmd.CommandText = “select * from city where [email protected]”;

cmd.Parameters.Add(new SqlParameter(“id”, id));

using (SqlDataReader dr = cmd.ExecuteReader())

{

while (dr.Read())

{

comboBox2.Items.Add(dr.GetString(dr.GetOrdinal(“cityName”)));

}

}

}

comboBox2.SelectedIndex = 0; //将comcomboBox1的默认选项设为0

}

}

}

class Tsql

{

public static string GetConnection() //数据库连接字符串

{

string getConn = ConfigurationManager.ConnectionStrings[“getConn”].ConnectionString;

return getConn;

}

}

class Province

{

public string proName { get; set; }

public int proID { get; set; }

}

}

代码如下:

using System.Data.SqlClient;

namespace 省市选择2

{

public partial class Form1 : Form

{

publicForm1()

{

InitializeComponent();

}

privatevoid Form1_Load(objectsender,EventArgs e)

{

/*

//测试代码:执行这段代码的情况下是可以吧 tom这个值添加到 comboBox1中的。

People p1 = new People();

p1.name = “tom”;

p1.age = 25;

comboBox1.Items.Add(p1.name);

*/

using(SqlConnection conn =newSqlConnection(“Data source=凡斌-VAIO;Initialcatalog=DBPromary;integrated security=true”))

{

conn.Open();

using(SqlCommand cmd = conn.CreateCommand())

{

cmd.CommandText = “select * from promary”;

using(SqlDataReader reader = cmd.ExecuteReader())

{

while (reader.Read())

{

//string str =reader.GetString(reader.GetOrdinal(“proName”));

//comboBox1.Items.Add(str);

Province  pv =new  Province();

//将comboBox1控件的DisplayMember属性设置为“ProvinceName”用来在comboBox1控件中显示ProvinceName属性的值

comboBox1.DisplayMember = “ProvinceName”;

pv.ProvinceName =reader.GetString(reader.GetOrdinal(“proName”));

pv.ProvinceID =reader.GetInt32(reader.GetOrdinal(“proID”));

//虽然pv属于对象,把一个对象添加到ComboxBox1中,控件显示的值为对象的类名,但是在前面comboBox1.DisplayMember =”ProvinceName”处已经设置好控件要显示的为 Province类的ProvinceName值,所以添加进去的是pv对象的ProvinceName值

comboBox1.Items.Add(pv);

}

}

}

}

}

privatevoid comboBox1_SelectedIndexChanged(object sender,EventArgse)       //注意这里是comboBox1不是comboBox2

{

try

{

Province  tem = (Province) comboBox1.SelectedItem;

int id = tem.ProvinceID;

comboBox2.Items.Clear();

using(SqlConnection conn =newSqlConnection(“Data source=凡斌-VAIO;Initialcatalog=DBPromary;integrated security=true”))

{

conn.Open();

using (SqlCommand cmd = conn.CreateCommand())

{

//查询city(市)表里的 proID与promary(省)表里proID相同的所有数据。

cmd.CommandText = “select * from city where proID [email protected]”;

cmd.Parameters.Add(new SqlParameter(“id”, id));

SqlDataReader dr = cmd.ExecuteReader();

while(dr.Read())

{

comboBox2.Items.Add(dr.GetString(dr.GetOrdinal(“cityName”)));

}

}

}

}

catch(Exception ex)

{

MessageBox.Show(“错误信息:” + ex.Message);

}

}

}

class Province

{

public string ProvinceName { get;set; }

public int ProvinceID { get;set; }

}

//class People

//{

//   public string name { get; set; }

//   public int age { get; set; }

//}

}

如下图所示:

希望本文所述对大家的C#程序设计有所帮助。

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#用ComboBox控件实现省与市的联动效果的方法

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23162.html

相关内容

C# 以MDF文件链接数据库的示例代码

C# RSA分段加解密实现方法详解

C#给Excel添加水印实例详解

C# 为String类型增加方法详解


C#通过指针实现快速拷贝的方法

C#控制台进行文件读写的方法

C#异步委托调用实例分析

C#预定义数据类型之值类型和引用类型介绍

时间: 2024-07-29 15:08:49

C#用ComboBox控件实现省与市的联动效果的方法的相关文章

C#在窗口中ComboBox控件中加载数据库数据

首先,窗体一加载,绑定省份和城市数据 //窗口加载事件 private void register_Load(object sender, EventArgs e) { bindPro();//绑定省份数据函数 } /// <summary> /// 绑定省份数据函数 /// </summary> public void bindPro() { //获取数据库数据 List<ProvinceData> list = new ProvinceDA().Select();

C# dataGridView控件中加入comboBox控件及注意事项

DataGridViewComboBoxColumn pCombo; private void Teaching_Add_Load(object sender, EventArgs e) { MyDBase DB = new MyDBase(DBUser.sserver,DBUser.DBName, DBUser.suser, DBUser.spasswd); DataSet DS= DB.GetRecordset("select * from view_teach_tmp"); da

MFC之ComboBox控件

添加内容 ComboBox_AddString(hwndCtl,lpsz) hwndCtl为此组合框的句柄,lpsz为需要添加的字符串,组合框不能直接通过id添加内容,所以需要得到这个控件的句柄,还得使用GetDlgItem()函数. 举例: HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1); //建立一个组合框,ID可以设置为IDC_C1,然后通过GetDlgItem获取这个组合框的句柄 //如果无法正常显示,需要调整此组合框的最大显示范围,在向下箭头上出现上

Combobox控件实现汉字按拼音首字母检索

Combobox控件在开发中作为下拉选项的不二之选,用的非常频繁,前几日开发过程中刚好有个需求有用到这个控件,而且客户要求增加下拉选择功能,这个简单,设置控件的自动完成属性后就解决了 this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;//设置自动完成的源  this.comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;//设置自动完成的的形式 发现场

自定义ComboBox控件,完美解决C#自带的ComboBox效率慢的问题

自定义ComboBox控件,完美解决C#自带的ComboBox效率慢的问题 欢迎关注http://blog.csdn.net/aaa123524457 转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47058675 在做项目的时候,用到了ComboBox来做下拉列表的功能:但是在用的时候发现C#自带的ComboBox效率非常的慢! 当然我添加的是股票.期货的合约数据,大概有几千条信息,算是比较大的.如果用到的数据很少,就可以直

2014-07-30 DataGridView单元格ComboBox控件Index

项目是在DataGridView单元格中搞得ComboBox控件. 而且要根据ComboBox对应的不同选项,来确定界面上的另一个ComboBox控件是否可用. 这样问题就出来了: DataGridView中的ComboBox是没有事件的! 当更改了Combox中的值以后,必须用鼠标点一下别的地方(鼠标离开此单元格),才会走CellValueChanged事件...... 研究+百度了好久,都不行,终于在中午灵光一闪,搞定了! 思路就是把这个没有事件的单元格,变成有事件的控件: 1 //定义全局

使用EasyUI的combobox控件实现级联搜索条件

昨天接到一个需求,是做一个简单的查询页面,相对于目前公司系统有一个新的东西,需要实现多级机构的级联查询.公司系统的前端框架采用的是jquery-easyui-1.4.3, 在以前接触到的系统中,前端做的不是太多,有采用velocity+html的,实现这种级联倒是做过,只是没怎么记录.现在使用easyui,需要学习一下. 看了些关于easyui的东东,打算采用combobox的input来实现这个级联查询功能. 首先,combobox 实现 动态加载 选项的方法有: reload(url)  .

界面存在多个easyUI Combobox控件时,加载数据失败,或加载不正确

问题原因:当一个界面上有多个easyui ComboBox控件,且在界面加载时同时请求数据.由于数据是异步加载,会导致下拉数据源加载失败,或加载不正确(串数据). 方案一:不用在一开始设定url(data加载路径),在点击控价下拉按钮时再加载数据源. <td>处理类型:</td> <td><input id="handleType" name="handleType" panelHeight="auto"

非映射的形式检查TextBox,ComboBox控件的值是否为空(是否被选中)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Med