【问题标题】:Key in C# combobox but show different value键入 C# 组合框但显示不同的值
【发布时间】:2012-06-11 09:28:03
【问题描述】:

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

In the combobox I want to show first and last name but when selected - the value is the customerID. 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"]);
}

【问题讨论】:

  • 在您的情况下,您不会获得价值。如果我了解您想要什么,那么您需要了解 DataSourceDisplayMemberValueMember 属性。

标签: c# combobox


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    comboSelectCust.Items.Add(new ComboBoxItem() { 
        Content = dt.Rows[i]["FName"] + dt.Rows[i]["Surname"], 
        Tag = dt.Rows[i]["customerId"]
    });
    

    【讨论】:

      【解决方案3】:
      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()));
      }
      

      【讨论】:

        【解决方案4】:

        这里是如何使用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";
        

        【讨论】:

          【解决方案5】:

          试试看

          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;
          

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

          【讨论】:

            猜你喜欢
            • 2014-09-23
            • 2014-12-13
            • 1970-01-01
            • 2012-05-15
            • 1970-01-01
            • 2019-06-28
            • 1970-01-01
            • 2013-12-08
            • 1970-01-01
            相关资源
            最近更新 更多