[英]Uncertain response from Combobox SelectedItem
我正在使用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,我不知道我在哪里犯錯誤
有時,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;
}
}
這是從ComboBox中獲取所選DataRowView的方法
由於您使用數據綁定來填充組合框。 在這種情況下,使用組合框的SelectedItem屬性。 它可能包含DataRowView,因此您可以使用這樣的代碼。
DataRowView viewRow = (DataRowView)cmbBranch.SelectedItem;
DataRow row = viewRow.Row;
解決方法可以是檢查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());
我不確定這是否是有效的解決方案,但可以解決方法!
我假設你在br_id
。 你有沒有嘗試過:
employeeBranch = ConvertToInt32(cmBranch.SelectedValue);
如果您希望br_id
使用SelectedValue
而不是SelectedItem
。
int id = (int)cmBranch.SelectedValue;
SelectedValue
返回ValueMember
指定的屬性的ValueMember
。 SelectedItem
應始終返回數據行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.