我正在使用winform并使用组合框。
我在此序列中设置了组合框的属性
combobox.DisplayMember
combobox.ValueMember
combobox.DataSource
绑定代码
private void BindBranch()
{
BranchClass branch = new BranchClass();
branch.Active = true;
branch.Company = Startup.CompID;
if (branch.GetAll(out dtBranch, out result))
{
cmbBranch.DisplayMember = "br_name";
cmbBranch.ValueMember = "br_id";
cmbBranch.DataSource = dtBranch;
}
else
{
MessageBox.Show(result);
}
}
我在我的应用程序中多次使用过combobox,我不知道我在哪里犯了错误
Sometime SelectedItem属性返回精确值(int,string) 在“ValueMember”属性的数据类型上,但有时它返回 “DataRowView”,在这种情况下抛出InvalidCastException。
我读过这是因为在组合框中设置属性的顺序。但现在情况并非如此。
绑定代码是
调用代码
private void BindEmployee()
{
employee.Branch = Convert.ToInt32(cmbBranch.SelectedItem); // InvalidCastException thrown here
employee.Active = true;
var dt = new DataTable();
if (employee.GetEmployee(out dt, out result, false))
{
cmbEmployee.DisplayMember = "emp_name";
cmbEmployee.ValueMember = "emp_id";
cmbEmployee.DataSource = dt;
}
}
答案 0 :(得分:0)
这是从ComboBox中获取所选DataRowView的方法
由于您使用数据绑定来填充组合框。在这种情况下,使用组合框的SelectedItem属性。它可能包含一个DataRowView,因此您可以使用这样的代码。
DataRowView viewRow = (DataRowView)cmbBranch.SelectedItem;
DataRow row = viewRow.Row;
答案 1 :(得分:0)
解决方法可以是检查cmbBranch.SelectedItem返回的类型,如下所示:
object item = cmbBranch.SelectedItem;
int branchId;
if (item is int)
branchId = item as int;
else if (item is DataRowView)
branchId = Convert.ToInt32(((DataRowView)item)["BR_ID"].ToString());
我不确定这是否是有效的解决方案,但可以解决方法!
答案 2 :(得分:0)
我假设你在br_id
之后。你试过了吗?
employeeBranch = ConvertToInt32(cmBranch.SelectedValue);
答案 3 :(得分:0)
如果您希望br_id
使用SelectedValue
代替SelectedItem
。
int id = (int)cmBranch.SelectedValue;
SelectedValue
返回ValueMember
指定的属性的值。 SelectedItem
应始终返回数据行。