未设置组合框的SelectedValue
本文关键字:SelectedValue 组合 设置 | 更新日期: 2023-09-27 18:26:53
我的comboBox名称为cmbContactType
。我绑定了这个组合,dataSource作为DisplayMember ValueName
(字符串类型),valueMember作为ValueID
(数字类型)。当用户更改cmbContactType中的值时,就会设置cmbContactType.SelectValue,我可以用这个Selected值保存文档。我在从数据库中设置cmbContainerType值时遇到问题,该值的类型为number。每次我尝试设置值时,null
值都设置为cmbContactType.SelectValue
。以下是我将数据源绑定到cmbContactType
并设置cmbContactType
的SelectedValue的代码。我正在使用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与cmbConatType绑定的代码。此方法对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");
}
尝试此方法
int index;
// Search the Item that matches the string
index=cmbContactType.FindString(_row["ContactType"]);
// Select the Item in the Combo
cmbContactType.SelectedIndex=index;
您应该注意到DataSource
中实际的ValueMember
的类型,当将SelectedValue
分配给某个值时,它应该可以转换为DataSource中实际ValueMember
的类型。
您必须确保_row["ContactType"]
必须包含在cmbContactType
的项值中。否则,SelectedItem
将为空。你应该做一些检查,看看是否有帮助。
最后我找到了问题的解决方案,当我查找cmbContactType.SelectedValue的类型时,我发现它是Int16的类型。。。!并使用以下语句cmbContactType.SelectedValue获取set。
cmbContactType.SelectedValue =_row["ContactType"] != null ? Convert.ToInt16(_row["ContactType"]) : (Int16)(-1) ;