如何在一个组合框中显示两个不同的列
本文关键字:两个 显示 组合 一个 | 更新日期: 2023-09-27 18:21:39
我想在一个特定的组合框中显示两个不同的列。当我运行它时,将显示Customer ID
。这是我的密码。
void GetRecords2()
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "SELECT CustomerID, firstname
+ ',' + lastname FROM Customer";
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds, "Customer");
cboName.DataSource = ds;
cboName.DisplayMember = "Customer.firstname, Customer.lastname";
cboName.ValueMember = "Customer.CustomerID";
}
我看到您已经创建了包含"组合"值的单个结果列。这就是战斗。
但是,您需要为您的列命名(注意AS FullName
别名):
cmd.CommandText = "SELECT CustomerID, firstname + ',' + lastname AS FullName " +
"FROM Customer";
所以你以后可以参考它的名字:
cboName.DisplayMember = "FullName";
这将起作用。我发现将Dictionary
与ComboBox
结合具有更可预测的结果。
我的方法省略了额外的SQL
语法、DataSet
和SqlDataAdapter
。
相反,我使用SqlDataReader
将所需信息放置到Dictionary
中,然后将该Dictionary
绑定为Combobox
的DataSource
。
void GetRecords2()
{
Dictionary <int, string> myDict = new Dictionary<int, string>();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "SELECT CustomerID, firstname, lastname FROM Customer";
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
myDict.Add(Convert.ToInt32(reader["CustomerID"]),
reader["firstname"].ToString() + " " + reader["lastname"].ToString());
}
if (myDict.Count > 0)
{
cboName.DataSource = new BindingSource(myDict, null);
cboName.DisplayMember = "Value";
cboName.ValueMember = "Key";
}
}
检查此项:
void GetRecords2()
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "SELECT CustomerID, firstname
+ ',' + lastname FullName FROM Customer";
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds, "Customer");
cboName.DataSource = ds;
cboName.DisplayMember = "FullName";
cboName.ValueMember = "CustomerID";
}
获取所选值:
string customerid = cboName.SelectedValue.toString(); //CustomerID: 1
获取所选项目
string fullname = cboName.SelectedItem.Text; //FullName : John Hawkins
向致以最诚挚的问候