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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小天 中级黑马   /  2013-8-14 01:15  /  1712 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小天 于 2013-8-14 09:47 编辑

希望大家帮忙分析一下,愁死我了,为什么cb省里添加的是对象而不是从数据库中读出来的字段?
代码如下
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 test10
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         private void cb省_SelectedIndexChanged(object sender, EventArgs e)
          {
                     Province item = (Province)cb省.SelectedItem;
                    int id = item.Id;
                    using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\mydb1.mdf;Integrated Security=True;User Instance=True"))
                    {
                        conn.Open();
                        using (SqlCommand cmd = conn.CreateCommand())
                        {
                            cmd.CommandText = "select * from T_City where FProvinceId=@id";
                            cmd.Parameters.Add(new SqlParameter("id", id));
                            using (SqlDataReader reader = cmd.ExecuteReader())
                            {
                                cb市.Items.Clear();
                                while (reader.Read())
                                {
                                    string name = reader.GetString(reader.GetOrdinal("FCity"));
                                    cb市.Items.Add(name);
                                }
                            }
                        }
                    }
          }
        private void Form1_Load(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\mydb1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_Province";
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Province item = new Province();
                            item.Id = reader.GetInt32(reader.GetOrdinal("Id"));
                            item.Name = reader.GetString(reader.GetOrdinal("FProvince"));
                            cb省.Items.Add(item);
                        }
                    }
                }
            }            
        }
    }
    class Province
    {
        public string Name { set; get; }
        public int Id { set; get; }
    }           
}

cw.jpg (14.71 KB, 下载次数: 0)

cw.jpg

7 个回复

正序浏览
小天 中级黑马 2013-8-14 10:12:02
8#
gb2312_8 发表于 2013-8-14 09:56
你用我第一种方法,只绑定了name,没绑定id,肯定出错,,你用数据源绑定一下,上面我修改了,你看看 ...

测试以后,可以通过,谢谢你的回答
回复 使用道具 举报
小天 发表于 2013-8-14 09:54
cb省.Items.Add(item.Name);修改以后cb省的下拉框可以显示省名,但是市那个下拉框就出错了,提示:
无法 ...

你用我第一种方法,只绑定了name,没绑定id,肯定出错,,你用数据源绑定一下,上面我修改了,你看看
回复 使用道具 举报
gb2312_8 发表于 2013-8-14 09:31
他这一步还没有访问到“cb省_SelectedIndexChanged”这个方法,现在是省还没有绑定上,你改一下这句代码: c ...

cb省.Items.Add(item.Name);修改以后cb省的下拉框可以显示省名,但是市那个下拉框就出错了,提示:
无法将类型为“System.String”的对象强制转换为类型“test10.Province”
回复 使用道具 举报
许庭洲 发表于 2013-8-14 06:38
注释掉cb市.Items.Clear();试试看

如果注释掉cb市.Items.Clear();的话,每次选择cb省的下拉框的时候都会在cb市这个下拉框里添加
回复 使用道具 举报
谢谢大家,问题已经解决
回复 使用道具 举报
本帖最后由 gb2312_8 于 2013-8-14 09:52 编辑

他这一步还没有访问到“cb省_SelectedIndexChanged”这个方法,现在是省还没有绑定上,你改一下这句代码: cb省.Items.Add(item.Name);还有就是绑定数据源
  1. List<Province> li = new List<Province>();

  2.                         while (reader.Read())
  3.                         {
  4.                            
  5.                             Province item = new Province();
  6.                             item.Id = reader.GetInt32(reader.GetOrdinal("id"));
  7.                             item.Name = reader.GetString(reader.GetOrdinal("name"));
  8.                             li.Add(item);
  9.                            

  10.                         }
  11.                         cb省.DataSource = li;
  12.                         cb省.DisplayMember = "Name";
  13.                         cb省.ValueMember = "Id";
复制代码

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
注释掉cb市.Items.Clear();试试看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马