2

我的组合框名称为cmbContactType. 我将此组合与 dataSource 绑定为 DisplayMember ValueName(字符串类型)和 valueMember 作为ValueID(数字类型)。当用户更改 cmbContactType 中的值时,然后 cmbContactType.SelectValue 被设置,我可以使用此 Selectedvalue 保存文档。我在从类型为编号的数据库中设置 cmbContactType 值时遇到问题。每次我尝试设置值时,将null值设置为cmbContactType.SelectValue. 以下是我将数据源绑定到cmbContactType并设置 SelectedValue 的代码cmbContactType。我正在使用 VS2010 和 MS-Access。请帮忙。

    //method to bind dataSource.
    public static void BindDataSourceWithCombo(ref ComboBox cmb, string query, string valueMember, string displayMember)
    {
        DataTable _tableSource = (new AccessConnectionManager()).GetDataTableBySQLQuery(query);

        var _dataSource = (from DataRow _row in _tableSource.Rows
                           select new
                           {
                               ValueMember = _row[valueMember],
                               DisplayMember = _row[displayMember].ToString()

                           }).ToList();

        cmb.DisplayMember = "DisplayMember";
        cmb.ValueMember = "ValueMember";
        cmb.DataSource = _dataSource;
    }

    // Method to set values in document.
    public void SetDocumentProperties()
    {
        string _query = string.Format("Select ContactCode,ContactName,ContactType from ContactMaster where ContactCode = '{0}'", Convert.ToString(cmbContactCode.Text));
        DataTable _table = AccessConnectionManagers.GetDataTableBySQLQuery(_query);

        if (_table.Rows.Count > 0)
        {
            DataRow _row = _table.Rows[0];
            txtContactCode.Text = Convert.ToString(_row["ContactCode"]);
            txtContactName.Text = Convert.ToString(_row["ContactName"]);
            cmbContactType.SelectedValue = _row["ContactType"];
        }
        else
        {
            txtContactCode.Text = string.Empty;
            txtContactName.Text = string.Empty;
            cmbContactType.SelectedValue = 1;
        }
    }

这是我将 dataSource 与 cmbConactType 绑定的代码。此方法调用 Form_Load 事件。

    private void LoadContactTypeCombo()
    {
        //Table: PicklistValues(ID,MasterID,ValueID,ValueName) 
        string _query = string.Format("select ValueID,ValueName from PicklistValues where MasterID = {0}", 1);
        BindDataSourceWithCombo(ref cmbContactType, _query, "ValueID", "ValueName");
    }
4

3 回答 3

3

试试这个方法

int index;
// Search the Item that matches the string
index=cmbContactType.FindString(_row["ContactType"]);
// Select the Item in the Combo
cmbContactType.SelectedIndex=index;
于 2013-08-08T07:13:36.987 回答
2

你应该注意你的实际的类型ValueMemberDataSource当分配给某个值时,它应该可以转换为你的数据源SelectedValue中的实际的类型。ValueMember

您必须确保它_row["ContactType"]必须包含在您的cmbContactType. 如果不是,SelectedItem则将为空。您应该进行一些检查,看看它是否有帮助。

于 2013-08-08T07:42:10.343 回答
0

最后我找到了我的问题的解决方案,当我寻找 cmbContactType.SelectedValue 的类型时,我发现它是 typeof Int16 ...!并通过使用以下语句 cmbContactType.SelectedValue 得到设置。

cmbContactType.SelectedValue =_row["ContactType"] != null ? Convert.ToInt16(_row["ContactType"]) : (Int16)(-1) ;

于 2013-08-08T09:46:06.097 回答