私は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);
}
}
アプリケーションでコンボボックスを数回使用しましたが、どこで間違いを犯しているのかわかりません。
SelectedItemプロパティは、「ValueMember」プロパティのデータ型に基づいて正確な値(int、string)を返す場合がありますが、「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;
}
}