1

我有一个方法可以获取ComboBox对象和要在其项目上加载的查询。

该方法还要求提供另外 2 个项目:

1.DB表的列名并设置到Combobox'DisplayMember属性

2.该数据库表列名下每条记录的id,并将其设置为Combobox'ValueMember属性

public void DatabaseColumnRecordsToCombobox(ComboBox cbx, String query, String displayMember, String valueMember)
{
    try
    {
        cmd = new MySqlCommand(query, connection);
        da = new MySqlDataAdapter(cmd);
        tbl = new DataTable();
        da.Fill(tbl);
        cbx.DataSource = tbl;
        cbx.DisplayMember = displayMember;
        cbx.ValueMember = valueMember;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        this.CloseConnection();
    }
}

我通过创建一个包含 2 列、Id 及其对应名称的查询来使用该方法。并将其存储在ComboBox'sDisplayMemberValueMember:

DatabaseColumnRecordsToCombobox(cmbSupplier, "SELECT Id, Supplier_Name FROM Supplier WHERE Enable_Flag=1 ORDER BY Supplier_Name", "Supplier_Name", "Id");

对于冗长的介绍,我深表歉意,我只是想让大家在告诉我的问题之前了解我的程序是如何工作的。所以问题是如何DataGridView使用ComboBox'ValueMember属性选择默认项?

在以编程方式选择项目时,我所知道的只是使用cmbCategory.SelectedItem = "Supplier A",但我需要的是使用ValueMember. 这样我可以通过 Id 设置默认项目。

4

1 回答 1

3

只需使用 SelectedValue 代替:

comboBox1.SelectedValue = "2";

一个非常简单的例子只是为了说明我的意思:

        DataTable dt = new DataTable();
        dt.Clear();
        dt.Columns.Add("Id");
        dt.Columns.Add("Supplier_Name");
        DataRow r = dt.NewRow();
        r["Id"] = "1";
        r["Supplier_Name"] = "Supplier A";
        dt.Rows.Add(r);
        r = dt.NewRow();
        r["Id"] = "2";
        r["Supplier_Name"] = "Supplier B";
        dt.Rows.Add(r);
        r = dt.NewRow();
        r["Id"] = "3";
        r["Supplier_Name"] = "Supplier C";
        dt.Rows.Add(r);

        comboBox1.DataSource = dt;
        comboBox1.DisplayMember = "Supplier_Name";
        comboBox1.ValueMember = "Id";

        //This will set the ComboBox to "Supplier B"
        comboBox1.SelectedValue = "2";
于 2016-04-26T15:34:39.740 回答