簡體   English   中英

對象引用未設置為實例異常

[英]Object Reference not set to an instance Exception

我有一個綁定到數據源的DataGridView 我還有一個TextBox來過濾記錄。 在文本框的TextChanged事件中,我有一行代碼:我通過表單的designview綁定gridview,拖動gridview並選擇datasource ...然后選擇成員表。

(gvSideMember.DataSource as DataTable).DefaultView.RowFilter = 
    string.Format("F_NAME LIKE '%{0}%'", textSearch.Text);

但是當我嘗試過濾記錄時,它向我顯示對象引用未設置為實例。 數據源有記錄。 我不知道發生了什么,請指導我,幫助將不勝感激。

您正在使用as關鍵字。 可能是gvSideMember.DataSource ,雖然有記錄,但不是DataTable類型,所以(gvSideMember.DataSource as DataTable)null

如果DataSource不是DataTable ,則(DataSource as DataTable)返回null

例如,你可以做的是:

var src = gvSideMember.DataSource;

在該行之后放置斷點,然后當您點擊它時,在Visual Studio中使用QuickWatch src查看其類型和內容。

然后,您可以更新源代碼以使用正確類型的DataSource

編輯如果DataSource是DataSet,它將包含一個或多個表。 如果它包含單個表,則很容易檢索:

var src = (DataSet) gvSideMember.DataSource;
var table = src.Tables[0];

但如果它包含更多表,您可以使用正確的數字(0,1,...)或名稱檢索它:

var table = src.Tables["MyTable"];

您可以在語句之前測試nullity - 在下面的示例中,我只是記錄它們為空,因此您仍然會收到錯誤,但您可以使用這些檢查來決定不執行操作或提供默認值等。

if (gvSideMember == null) {
    Debug.WriteLine("gvSideMember is null");
}

if (textSearch == null) {
    Debug.WriteLine("textSearch is null");
}

(gvSideMember.DataSource as DataTable).DefaultView.RowFilter = 
    string.Format("F_NAME LIKE '%{0}%'", textSearch.Text);

甚至-你可以測試任何可能可能為空(gvSideMember.DataSource as DataTable).DefaultView如果你喜歡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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