从数据库获取数据到ComboBox

时间:2013-12-13 02:13:27

标签: c# sql combobox

短篇小说。

名为ComDet的数据库,以及列cID(PK),cName,cDet,mainCate(FK),Subcat(FK)。

这假设从表ComDet获取数据到组合框..

DataSet ds2;

private void searchBtn_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
    conn.Open();

    SqlDataAdapter daSearch = new SqlDataAdapter("SELECT cName FROM ComDet", conn);
    ds2 = new DataSet();
    daSearch.Fill(ds2, "daSearch");
    ListU.ValueMember = "cName";
    ListU.DataSource = ds2.Tables["ComDet"];
    ListU.DropDownStyle = ComboBoxStyle.DropDownList;
    ListU.Enabled = true;
}

但它没有用..我哪里出错了? 数据库表ComDet中的数据(cName)未显示在组合框中。 -

2 个答案:

答案 0 :(得分:2)

问题:您要将数据库表名ComDet指定为DataSource,而不是DataTabledaSearch指定为ComboBox

解决方案:您需要将有效DataTable名称指定为ComboBox Datasource

替换它:

ListU.DataSource = ds2.Tables["ComDet"];

有了这个:

ListU.DataSource = ds2.Tables["daSearch"];  

(或)

ListU.DataSource = ds2.Tables[0];

完整代码:

DataSet ds2;

private void searchBtn_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
conn.Open();

SqlDataAdapter daSearch = new SqlDataAdapter("SELECT cName FROM ComDet", conn);
ds2 = new DataSet();
daSearch.Fill(ds2, "daSearch");
ListU.ValueMember = "cName";
ListU.DataSource = ds2.Tables["daSearch"];
ListU.DropDownStyle = ComboBoxStyle.DropDownList;
ListU.Enabled = true;
}

答案 1 :(得分:1)

因此,问题是如何从数据库获取数据到组合框。就个人而言,我发现使用DataSet类是不可取的 - 它很容易出现像提问者在这里遇到的错误。

尝试这种方法。其中将cName读取到List并将List绑定到ComboBox。简单易读的代码。使用using语句还可确保有效释放非托管资源。

private void searchBtn_Click(object sender, EventArgs e)
{
    var list = new List<string>();
    using (var conn = new SqlConnection())
    {
        conn.ConnectionString = 
            "Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
        conn.Open();
        using (var cmd = new SqlCommand("SELECT cName FROM ComDet", conn))
        {
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    list.Add(Convert.ToString(reader["cName"]));
                }
            }
        }
   }
   ListU.DataSource = new BindingSource(list, null);
   ListU.DropDownStyle = ComboBoxStyle.DropDownList;
   ListU.Enabled = true;
}