A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

namespace 全国省市
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source =.\SQLEXPRESS;AttachDBFilename = |DataDirectory|\Database1.mdf;Integrated Security= true ;User Instance=true"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from promary";
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        Promary item = new Promary();
                       //comboBox1.DisplayMember=Name;
                        while (reader.Read())
                        {

                           
                            item.ID = reader.GetInt32 ((reader.GetOrdinal("proID")));
                            item.Name = reader.GetString(reader.GetOrdinal("proName"));
                            comboBox1.Items.Add (item);
                        }

                    }
                }
            }


        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox2.Items.Clear();
            Promary item = (Promary)comboBox1.SelectedItem;
            int proID = item.ID ;
            using (SqlConnection conn = new SqlConnection(@"Data Source =.\SQLEXPRESS;AttachDBFilename = |DataDirectory|\Database1.mdf;Integrated Security= true ;User Instance=true"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //cmd.CommandText = "select * from city";
                    //int proId = item.ID ;
                  cmd.CommandText = "select * from city where proID=@proID";
                   cmd.Parameters.Add(new SqlParameter("proID", proID));
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            string CityName = reader.GetString(reader.GetOrdinal ("cityName"));
                            comboBox2.Items.Add(CityName);
                           
                        }
                        
                        
                    }
                }
            }

        }
    }
        class Promary
        {
            public string Name { get; set; }

            public int ID { get; set; }

        }
      
    }

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

8 个回复

正序浏览
吴春晟 黑马帝 2011-11-16 15:42:34
9#
  1. while (reader.Read())
  2.                          {
  3.                              // cityItem.Name = reader.GetString(reader .GetOrdinal ("cityName"));
  4.                              string cityName = reader.GetString(reader.GetOrdinal("cityName"));
  5.                              cmb_shi.Items.Clear();  //清除上一次添加的痕迹
  6.                              cmb_shi.Items.Add(cityName);
复制代码
你cmb_shi.Items.Clear();  //清除上一次添加的痕迹

不能添加到 While语句中,

不然结果只能是只有一个ITEMS
回复 使用道具 举报
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;

namespace 省市的选择
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

      

        private void Form1_Load(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source =.\SQLEXPRESS;AttachDBFilename = |DataDirectory|\Database1.mdf;Integrated Security= true ;User Instance=true"))   //该处用 using()的目的是释放内存,以下也一样
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from promary";
                    using (SqlDataReader  reader = cmd.ExecuteReader())
                    {
                        //Readpromary items = new Readpromary();//在该处声明读取到的proID时最后一个字段(在本数据库中时35)
                        
                        while (reader.Read())
                        {
                            Readpromary items = new Readpromary();
                            items.Id = reader.GetInt32(reader.GetOrdinal ("proID"));
                            items.Name = reader.GetString(reader.GetOrdinal ("proName"));
                            cmb_sheng.Items.Add(items);
                        }
                    }
                }
            }

        }

      

        private void cmb_sheng_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            Readpromary items = (Readpromary)cmb_sheng.SelectedItem;//指针只认变量类型不认实际对象,所以要进行类型转换
            int proID = items.Id;
            using (SqlConnection conn = new SqlConnection(@"Data Source =.\SQLEXPRESS;AttachDBFilename = |DataDirectory|\Database1.mdf;Integrated Security= true ;User Instance=true"))   //该处用 using()的目的是释放内存,以下也一样
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from city where proID = @ProID";
                    cmd.Parameters.Add(new SqlParameter("ProID", proID));
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //Readpromary cityItem = new Readpromary();
                        while (reader.Read())
                        {
                            // cityItem.Name = reader.GetString(reader .GetOrdinal ("cityName"));
                            string cityName = reader.GetString(reader.GetOrdinal("cityName"));
                            cmb_shi.Items.Clear();  //清除上一次添加的痕迹
                            cmb_shi.Items.Add(cityName);
                        }
                    }
                }
            }

        }
    }
    class Readpromary
    {
        public string Name { get; set; }
        public int Id { get; set; }
    }
}
代码改进后,在cmb_shi中只有一个可选项,具体如图:
回复 使用道具 举报
吴春晟 黑马帝 2011-11-15 13:04:18
7#
你要出来一条记录 ,那要在
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
事件中指定 cmobobox2.selectedIndex=0;//给一个指定选 中项

点评

他说的对  发表于 2011-11-15 14:12

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
if (reader.Read())
不应用if读取,应用while循环
Promary item = (Promary)comboBox1.SelectedItem;  这行代码无法将类型为“System.String”的对象强制转换为类型“全国省市.Promary”。

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
朱勋 黑马帝 2011-11-15 09:24:46
报纸
楼上均正解,但是应该出来一条记录是不?
回复 使用道具 举报
朱勋 黑马帝 2011-11-15 09:17:52
板凳
楼上均正解,但是应该出来一条记录是不?
回复 使用道具 举报
  if (reader.Read())
这里有错误,if改成while。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
if (reader.Read())   // 你用if ? 那不是只读取第一条数据
{
      string CityName = reader.GetString(reader.GetOrdinal ("cityName"));
      comboBox2.Items.Add(CityName);
}

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马