短篇小说。
名为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)未显示在组合框中。 -
答案 0 :(得分:2)
问题:您要将数据库表名ComDet
指定为DataSource
,而不是DataTable
将daSearch
指定为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;
}