国内省市关联选择功能的实现-优化

来源:互联网 发布:刘雯的地位 知乎 编辑:程序博客网 时间:2024/05/20 02:51

刚才完成了省市选择的优化,但是有一个问题就是,我在更具所选省查找城市的时候用的是comboBox1.SelectedIndex+1当作省份的ID但是这样如果省份的ID不是连续的或者不思顺序的,那么就很难准确定位到具体是哪一个省,刚才看视频又有个新方法,就是在定义一个类,用来存放数据库查询到的省份。然后再添加comboBox的时候直接添加类对象,但是这样又有一个问题就是显示的时候不是显示的省份名而是显示"类.对象",那么就需要重写次类的ToString()方法让其显示省份名字。然后再用户确定省份后就可以定位到具体的某个对象,即具体某个省的信息,然后获得省份ID进行相关查询。

具体实现代码如下:

=======省份类

class ProvinceItems
    {
        public int proID { get; set; }
        public string proName { get; set; }
        public override string ToString()
        {
            return proName;
            //return base.ToString();//这是默认显示的数据
        }
    }

=======省comboBox1

        private void comboBox1_Enter(object sender, EventArgs e)
        {
            using (SqlConnection sqlconn = this.DBConn("Remote"))
            {
                using (SqlCommand sqlcmd = sqlconn.CreateCommand())
                {
                    comboBox1.Items.Clear();
                    sqlcmd.CommandText = "select proID,proName from Province";
                    SqlDataReader sdr = sqlcmd.ExecuteReader();
                    while (sdr.Read())
                    {
                        ProvinceItems proitem = new ProvinceItems();
                        proitem.proID = sdr.GetInt32(sdr.GetOrdinal("proID"));
                        proitem.proName = sdr.GetString(sdr.GetOrdinal("proName"));
                        //向comboBox1.Items增加一个ProvinceItems类型数据。
                        //如果要显示此类型的某些项可以在comboBox属性的DisplayMember中设置
                        //或者重写ToString()方法;
                        comboBox1.Items.Add(proitem);
                        //不能直接加proitem.proName;为后面得到proitem.proID做准备
                        //comboBox1.Items.Add(sdr.GetInt32(sdr.GetOrdinal("proID")) + "、" + sdr.GetString(sdr.GetOrdinal("proName")));
                    }
                }

            }

        }

=======对市comboBox2的处理

private void SelectedChanged(object sender, EventArgs e)
        {
            using (SqlConnection sqlconn = this.DBConn("Remote"))
            {
                using (SqlCommand sqlcmd = sqlconn.CreateCommand())
                {
                    //****************************
                    //将object类型强转为ProvinceItems与前面comboBox1.Items.Add(proitem);将ProvinceItems添加到object类型相一致
                    ProvinceItems proitem = (ProvinceItems)comboBox1.SelectedItem;
                    sqlcmd.CommandText = "select cityID,cityName from city where proID=@proID ORDER BY cityID";
                    sqlcmd.Parameters.Add(new SqlParameter("proID",proitem.proID));
                   
                    SqlDataReader sdr = sqlcmd.ExecuteReader();

                    comboBox2.Items.Clear();

                    while (sdr.Read())
                    {
                        comboBox2.Items.Add(sdr.GetInt32(sdr.GetOrdinal("cityID")) + "、" + sdr.GetString(sdr.GetOrdinal("cityName")));
                    }
                    comboBox2.Text = comboBox2.Items[0].ToString();
                    sqlcmd.Parameters.Clear();

                }

            }
        }

=======数据库的连接

 public SqlConnection DBConn(string RemoteORLocal)
        {
            if (RemoteORLocal.Equals("Remote"))
            {
                SqlConnection sqlconn = new SqlConnection(@"Server=218.198.33.210/;Integrated Security=false;DataBase=DB_Zyyy;User ID=YangShuang;Password=123456;pooling=false");
                sqlconn.Open();
                return sqlconn;
            }
            else
            {
                SqlConnection sqlconn = new SqlConnection(@"Data Source=./SQLEXPRESS;AttachDbFilename=D:/MSCodes/ASP.NET/UserManager/ToTesting/MyTestDB.mdf;Integrated Security=True;User Instance=True");
                sqlconn.Open();
                return sqlconn;
            }
        }

 

原创粉丝点击