我写了一段在DataGrideView里绑定CommBox的代码!为什么总System.FormatException:DataGridViewComboxBoxCell值无效。的错误请各位前辈指正。
DataGridViewComboBoxColumn cmb_Unit = new DataGridViewComboBoxColumn();
        private DataTable GetSelecttable_condition(string Sql)
        {
            DataTable dt = new DataTable();
            try
            {
                SqlConnection conn = new SqlConnection("server=192.168.1.58;user id=sa;password=sa;database=Business");
                conn.Open();                //创建SqlCommand对象
                SqlCommand cmd = new SqlCommand(Sql, conn);
                cmd.CommandType = CommandType.Text;                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();
                dt.Load(reader);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return dt;
        }        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("unit");            DataRow rw = dt.NewRow();
            rw["unit"] = 2;
            dt.Rows.Add(rw);           
            cmb_Unit.DataPropertyName = "unit";  //这个是对应选择的编号
            cmb_Unit.DisplayMember = "unitname"; //这里定义在下拉框里下拉列表的显示的name
            cmb_Unit.ValueMember = "id";      //这里定义在下拉框里下拉列表的显示的name
            cmb_Unit.HeaderText = "单位";
            cmb_Unit.DataSource = GetSelecttable_condition("select id,unitname from sys_unit");            this.dataGridView1.Columns.AddRange(new DataGridViewColumn[] { cmb_Unit });
            this.dataGridView1.DataSource = dt;
        }CREATE TABLE [sys_unit] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[unitname] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_sys_unit] PRIMARY KEY  CLUSTERED 
(
[id]
)  ON [PRIMARY] 
) ON [PRIMARY]
GOinsert into sys_unit(unitname) values("个");
insert into sys_unit(unitname) values("把");
insert into sys_unit(unitname) values("双");
insert into sys_unit(unitname) values("包");CREATE TABLE [sys_order_ware] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[unit] [int] NULL ,
CONSTRAINT [PK_sys_order_ware] PRIMARY KEY  CLUSTERED 
(
[id]
)  ON [PRIMARY] 
) ON [PRIMARY]
GOinsert into sys_order_ware(unit) values(2);
代码完全可以运行!请各位前辈指正!

解决方案 »

  1.   

    SQL那里有点错误!改正后运行就没错了!CREATE TABLE [sys_unit] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [unitname] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    CONSTRAINT [PK_sys_unit] PRIMARY KEY  CLUSTERED 
    (
    [id]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]
    GOinsert into sys_unit values('个')
    insert into sys_unit values('把')
    insert into sys_unit values('双')
    insert into sys_unit values('包')CREATE TABLE [sys_order_ware] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [unit] [int] NULL ,
    CONSTRAINT [PK_sys_order_ware] PRIMARY KEY  CLUSTERED 
    (
    [id]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]
    GOinsert into sys_order_ware(unit) values(2)
      

  2.   

    DataGridViewComboBoxColumn
    DatagridViewComboxColumn cmbox = Datagridview.Columns["COmbox控件的Name"] as DatagridViewComboxColumn ; cmbox.DataSource = 下框的数据源; 
    cmbox.DataPropertyName= datagrid的数据源的要绑定的列; 
    cmbox.d...Member="下拉框显示的TEXT"; 
    cmbox.ValueMember="隐藏的值"; 
    DataGridViewComboBoxColumn csex = new DataGridViewComboBoxColumn(); 
    csex.DataPropertyName = "sSex"; 
    csex.HeaderText = "性别"; 
                DataTable dt = new DataTable(); 
                dt.Columns.Add("sexname"); 
                dt.Columns.Add("sexvalue"); 
                DataRow dr = dt.NewRow(); 
                dr[0] = "男"; 
                dr[1] = "1"; 
                dt.Rows.Add(dr); 
                DataRow dr1 = dt.NewRow(); 
                dr1[0] = "女"; 
                dr1[1] = "2"; 
                dt.Rows.Add(dr1); 
                
                csex.DataSource = dt; 
                csex.ValueMember = "sexvalue"; 
                csex.DisplayMember = "sexname"; 
                this.datagridview1.Columns.Add(csex); 
      

  3.   

    2楼前辈!您写的是VB.Net代码吧!您写的和我写的都一样啊!我是说我的代码为什么会报错那!
      

  4.   

    DataGridViewComboxColumn obj = ...
    string[] s = new string[]{"a","b","c"};
    obj.Items.AddRange(s);试试这样
      

  5.   

    private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("unit");
    //上面一句代码改为dt.Columns.Add("unitname");            DataRow rw = dt.NewRow();
                rw["unit"] = 2;
                dt.Rows.Add(rw);           
                cmb_Unit.DataPropertyName = "unit";  //这个是对应选择的编号
    //上面一句代码改为cmb_Unit.DataPropertyName = "unitname";              cmb_Unit.DisplayMember = "unitname"; //这里定义在下拉框里下拉列表的显示的name
                cmb_Unit.ValueMember = "id";      //这里定义在下拉框里下拉列表的显示的name
                cmb_Unit.HeaderText = "单位";
                cmb_Unit.DataSource = GetSelecttable_condition("select id,unitname from sys_unit");            this.dataGridView1.Columns.AddRange(new DataGridViewColumn[] { cmb_Unit });
                this.dataGridView1.DataSource = dt;
            }按照我上面的注释的地方改下试试,可能是要与select id,unitname from sys_unit的字段名一致才行
      

  6.   

    6楼前辈!我改了!错是不报了!直接显示数字了!明显不正确!这个程序是两个表的连动问题!
    GetSelecttable_condition("select id,unitname from sys_unit");
    这句话是查出所有下拉框里面的内容。DataTable dt = new DataTable();
                dt.Columns.Add("unit");            DataRow rw = dt.NewRow();
                rw["unit"] = 2;
                dt.Rows.Add(rw);而这个DataTable它的值只有一个,是指定这个下拉框所选定的内容的问题。
      

  7.   

    4楼前辈!如果把数据库内容都读取到数组中!那么
    cmb_Unit.DataPropertyName = "unit";  //这个是对应选择的编号
    cmb_Unit.DisplayMember = "unitname"; //这里定义在下拉框里下拉列表的显示的name
    cmb_Unit.ValueMember = "id";      //这里定义在下拉框里下拉列表的显示的name这些对应的值应该如何获取!我如何知道用户选择了哪个!用户选择之后,它所对应的ID又是哪个!我又该如何处理!请指教!