【问题标题】:Combo box select item by Id but displayed names组合框按 ID 选择项目但显示名称
【发布时间】:2017-05-01 14:09:03
【问题描述】:

我正在从数据库中获取数据以填充我的组合框,所以假设我有这样的数据:

|Column ID | Column Name |
|        1 |       Item1 |
|        2 |       Item2 |
|        3 |       Item3 |

所以现在我得到Column Name 并用它填充组合框,但现在我正在从其他一些功能更改组合框选定项,我想要的是在填充组合框以从数据库分配 ID 时,所以当我说将组合框选定的项目更改为 ID 3,它更改为项目 3

【问题讨论】:

  • .DisplayMember = "Name".ValueMember = "Id"
  • @Plutonix 你能说得更具体点吗?
  • 使用数据库值作为数据源的数据表

标签: c# sql winforms combobox


【解决方案1】:

您不需要类或从数据库数据创建列表。 DataTable 可以正常工作:

string sql = "SELECT Id, Descr FROM ccolor";

using (MySqlConnection dbcon = new MySqlConnection(MySQLConnStr))
using (MySqlCommand cmd = new MySqlCommand(sql, dbcon))
{
    DataTable dt = new DataTable();
    dbcon.Open();

    // fill the datatable
    dt.Load(cmd.ExecuteReader());

    // set up cbo
    cboColor.DisplayMember = "Descr";
    cboColor.ValueMember = "Id";
    cboColor.DataSource = dt;
}

它甚至不需要是一个持久表。然后,回复SelectedValueChanged 事件:

Console.WriteLine("The value of {0} is {1}", cboColor.Text, cboColor.SelectedValue);

橙色的值为5

【讨论】:

    【解决方案2】:

    我想通了。答案如下:

    divizija.DisplayMember = "Column Name";
    divizija.ValueMember = "Column Id";
    
    List<Items> items = new List<Items>();
    FbDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        items.Add(new Items { Id = (int)dr[0], Name = (string)dr[1]});
    }    
    divizija.DataSource = items;
    divizija.SelectedValue = divizijaDokumenta;
    

    对于项目列表,我需要上课,这里是

    public class Items
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      相关资源
      最近更新 更多