将一列数据存储在组合框中

时间:2009-11-22 10:56:24

标签: c# winforms

我想在combobox1中存储一次Table的列数据?以下是无效的代码:

SqlCommand cmdRe = new SqlCommand("select FK_RoleID from SO_User_Table", cn);
        SqlDataAdapter da = new SqlDataAdapter();
        DataTable dt = new DataTable();
        try
        {
            cn.Open();
            da.SelectCommand = cmdRe;
            da.Fill(dt);
             // textBox1.Text = dt.Rows[0].ItemArray[0].ToString();

          this.comboBox1.DisplayMember= "FK_RoleID";
          this.comboBox1.ValueMember = "FK_RoleID";
          this.comboBox1.DataSource = da;
        }

        catch (System.Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {

            cn.Close();
        }

4 个答案:

答案 0 :(得分:4)

您需要绑定到,而不是适配器:

this.comboBox1.DataSource = dt;

此外 - 如果您使用using,您可以稍微简化代码(您不需要finally等):

using(SqlCommand cmdRe = {blah}) {
    // {blah}
}

最后一点 - 随着.NET开发的进展,您可能需要考虑分离UI和数据逻辑。以相同的方法(甚至是dll)与db命令和ui-control交谈通常是代码嗅觉。

答案 1 :(得分:1)

您必须设置组合框的DataValueField和DataTextField属性。检查以下修改。

void textbox_value_load()
        {
            SqlCommand cmdRe = new SqlCommand("select FK_RoleID from SO_User_Table", cn);
            SqlDataAdapter da = new SqlDataAdapter();
            DataTable dt = new DataTable();
            try
            {
                cn.Open();
                da.SelectCommand = cmdRe;
                da.Fill(dt);


                this.comboBox1.DataSource = da;
                this.comboBox1.DataValueField = ""; //Name of the Id column
                this.comboBox1.DataTextField = ""; //Name of the value/name column
                this.comboBox1.DataBind();


            }

            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {

                cn.Close();
            }

        }

答案 2 :(得分:0)

在comboBox1控件上调用DataBind()

this.comboBox1.DataSource = da;
this.comboBox1.DataBind();

答案 3 :(得分:0)

很快,你应该使用dt作为数据源,而不是dataadapter。其次,如果您使用的是dataadapter和C#2.0或3.0,则不需要sqlcommand对象,将select语句放在dataadapter的构造函数中(MSDN链接 - http://msdn.microsoft.com/en-us/library/bh8kx08z.aspx)。希望有所帮助。

瓦德