2015-11-02 48 views
0

我有一個名爲組合框cmbCaseRemain其數據通過代碼C#WinForm的過濾器組合框項值

cmbCaseRemain.DataSource = ce.GET_ALL_CASEREMAIN(); 
cmbCaseRemain.DisplayMember = "caseRemain"; 
cmbCaseRemain.ValueMember = "idCaseRemain"; 

從數據表中填充和我有一個叫dgv_CaseRemain的datagridview從另一個數據表

DataTable dt = new DataTable(); 
dt = ce.GET_ALL_CASEREMAIN_FILTER(Convert.ToInt32(txtidCase.Text)); 
dgv_CaseRemain.DataSource = dt; 
獲取其數據

我正在使用組合框將項目添加到數據網格視圖...我希望在每次添加過濾組合框中的項目以便用戶不能兩次添加相同的值...所以我創建了存儲程序與參數

CREATE PROC [dbo].[FILTER_CMB_CASEREMAIN] 
    @ID int 
AS 
    SELECT 
     [idCaseRemain], [caseRemain] 
    FROM 
     [dbo].[tblCaseRemain] 
    LEFT OUTER JOIN 
     tblCase_Link_Remain ON idCaseRemain = idCaseRemain_L 
    WHERE 
     [idCaseRemain] <> @ID; 

,並使用代碼來傳遞參數,過濾器組合框,當我點擊它

DataTable dt = new DataTable(); 
dt = ce.FILTER_CMB_CASEREMAIN(Convert.ToInt32(this.dgv_CaseRemain.CurrentRow.Cells[1].Value)); 

if (dt.Rows.Count > 0) 
{ 
    cmbCaseRemain.DisplayMember = "caseRemain"; 
    cmbCaseRemain.ValueMember = "idCaseRemain"; 
    cmbCaseRemain.DataSource = dt; 
} 

,但我得到一個錯誤

對象引用未設置爲實例一個東西。

謝謝

(對不起我的英文不好:-))

+0

什麼是「ce」? 「ce.GET_ALL_CASEREMAIN();」在這個代碼中ce可能是空的,你是初始化的嗎? ce對象? – Jigneshk

+0

「ce」datatable的來源...其非空 '公用DataTable GET_ALL_CASEREMAIN() { DataTable dt = new DataTable(); dt = DAL.SelectData(「GET_ALL_CASEREMAIN」,null); DAL.close(); return dt; }' –

+0

調試你的應用程序,看看哪一行失敗。這是非常常見的錯誤,當您在沒有init的情況下訪問對象時會發生。我的下一個猜測是「this.dgv_CaseRemain.CurrentRow.Cells [1] .Value」行。 Plz會進行調試並找到確切的行。這是解決您的問題的最佳方式。沒有人能猜到你的整個代碼。 – Jigneshk

回答

1

確定。得到它了。正如我所說的那樣,這是錯誤的。使用下面的代碼。下面我添加驗證來檢查空值。

int n = 0; 
DataTable dt; 
if (this.dgv_CaseRemain.CurrentRow.Cells[1].Value != null) 
{ 
    if (int.TryParse(this.dgv_CaseRemain.CurrentRow.Cells[1].Value.ToString(), out n)) 
    { 
     dt = ce.FILTER_CMB_CASEREMAIN(n); 
    } 
} 
if (dt!=null && dt.Rows.Count > 0) 
{ 

    cmbCaseRemain.DisplayMember = "caseRemain"; 
    cmbCaseRemain.ValueMember = "idCaseRemain"; 
    cmbCaseRemain.DataSource = dt; 
}