簡體   English   中英

Combobox SelectedItem的不確定響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM