在组合框中显示行

时间:2017-08-17 10:23:02

标签: c# sql

我需要显示一些我拥有的数据库行,并在组合框中显示它们。

我已经使用了这段代码,但它没有显示正确的行,只显示System.Data.DataRow

这是我的代码:

public Form1()
    {
        InitializeComponent();
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
        using (SqlConnection sqlConn = new SqlConnection(conn))
        {
            string sqlQuery = @"SELECT CDU_ESTADOS  from  testetiposdestados";
            MessageBox.Show(sqlQuery);
            SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable table = new DataTable();
            da.Fill(table);
            comboBox1.DataSource = new BindingSource(table, null);

        }

    }

以下是组合框显示内容的屏幕截图:

enter image description here

这里的组合框应该显示:

enter image description here

如果您对代码有任何疑问或其他问题,请随时提出

1 个答案:

答案 0 :(得分:2)

您需要设置组合框DisplayMember属性。 否则,它只显示从ToString()数据项返回的值(在本例中为System.Data.DataRow):

combobox1.DisplayMember = "CDU_ESTADOS";

放入代码的上下文:

public Form1()
{
    InitializeComponent();
    string setting = ConfigurationManager.AppSettings["setting1"];
    string conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
    using (SqlConnection sqlConn = new SqlConnection(conn))
    {
        string sqlQuery = @"SELECT CDU_ESTADOS  from  testetiposdestados";
        MessageBox.Show(sqlQuery);
        SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable table = new DataTable();
        da.Fill(table);
        combobox1.DisplayMember = "CDU_ESTADOS";
        comboBox1.DataSource = new BindingSource(table, null);
    }
}

btw,SqlCommandSqlDataAdapter以及DataTable都实现了IDisposable接口 - 因此您应该将它们与using语句一起使用。 此外,我建议开始使用var关键字作为本地参数,它会使您的代码更短,更易读:

public Form1()
{
    InitializeComponent();
    var setting = ConfigurationManager.AppSettings["setting1"];
    var conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
    using (var sqlConn = new SqlConnection(conn))
    {
        var sqlQuery = @"SELECT CDU_ESTADOS  from  testetiposdestados";
        MessageBox.Show(sqlQuery);
        using(var cmd = new SqlCommand(sqlQuery, sqlConn))
        {
            using(var da = new SqlDataAdapter(cmd))
            {
                using(var table = new DataTable())
                {
                    da.Fill(table);
                    combobox1.DisplayMember = "CDU_ESTADOS";
                    comboBox1.DataSource = new BindingSource(table, null);
                }
            }
        }
    }
}