省与市的联动 WinF窗体用ComboBox控件实现省与市的联动效果。

31 篇文章 0 订阅

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 proID=@id";
                    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(市)表里的 proIDpromary(省)表里proID相同的所有数据。

                        cmd.CommandText = "select * from city where proID =@id";

                        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; }

    //}

}

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值