我需要显示一些我拥有的数据库行,并在组合框中显示它们。
我已经使用了这段代码,但它没有显示正确的行,只显示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);
}
}
以下是组合框显示内容的屏幕截图:
这里的组合框应该显示:
如果您对代码有任何疑问或其他问题,请随时提出
答案 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,SqlCommand
,SqlDataAdapter
以及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);
}
}
}
}
}