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