1

我想对数据库进行查询,该数据库将显示 customerID(身份)以及名字和姓氏。

在组合框中,我想显示名字和姓氏,但选择时 - 值是客户 ID。customerID 将作为另一个查询的主题来自动填充 Windows 窗体。

到目前为止,这就是我所拥有的-我知道这combobox.Items.Add部分是错误的-这就是我遇到问题的地方。

conn = new SqlConnection();
conn.ConnectionString = "my connection string";

SqlDataAdapter da = new SqlDataAdapter("Select * from Customer", conn);
DataTable dt = new DataTable();

da.Fill(dt);

for (int i = 0; i < dt.Rows.Count; i++) 
{
    comboSelectCust.Items.Add(dt.Rows[i]["FName" + "Surname"]);
}
4

5 回答 5

2

既然您为此使用了 DataTable,为什么不将它与 DisplayMember 和 ValueMember 绑定呢?

于 2012-06-11T09:39:10.380 回答
0

这是伪代码如何使用DataSourceDisplayMemberValueMember

SqlDataAdapter da = new SqlDataAdapter("Select FName || Surename as FullName, customerID from Customer", conn);
DataTable dt = new DataTable();

da.Fill(dt);

comboSelectCust.DataSource = dt;
comboSelectCust.DisplayMember = "FullName";
comboSelectCust.ValueMember = "customerID";
于 2012-06-11T09:42:27.683 回答
0

您可以使用ComboBoxItem的Tag属性来设置值(Content是设置显示文本的属性):

comboSelectCust.Items.Add(new ComboBoxItem() { 
    Content = dt.Rows[i]["FName"] + dt.Rows[i]["Surname"], 
    Tag = dt.Rows[i]["customerId"]
});
于 2012-06-11T09:36:18.667 回答
0
for (int i = 0; i < dt.Rows.Count; i++) 
{
   comboSelectCust.Items.Add(new KeyValuePair<string, int>(dt.Rows[i]["FName"].ToString() +  dt.Rows[i]["Surname"].ToString(), Convert.ToInt32(dt.Rows[i]["customerId"].ToString()));
}
于 2012-06-11T09:38:55.880 回答
0

试试这个看看

conn = new SqlConnection();
conn.ConnectionString = "my connection string";

SqlDataAdapter da = new SqlDataAdapter("Select (FName+' '+Surname) As Name,customerID from Customer", conn);
DataTable dt = new DataTable();

da.Fill(dt);

comboSelectCust.DisplayMember = "Name";
comboSelectCust.ValueMember = "customerID";
comboSelectCust.DataSource = dt;

我更改了查询并添加了显示成员和 valuemeber 属性并将数据表分配为数据源

于 2012-06-11T09:55:11.173 回答