对象引用未设置为实例异常

时间:2013-12-06 10:08:25

标签: c# sql winforms

我有一个绑定到数据源的DataGridView。我还有一个TextBox来过滤记录。在文本框的TextChanged事件中,我有一行代码:我通过表单的designview绑定gridview,拖动gridview并选择datasource ...然后选择成员表。

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

但是当我尝试过滤记录时,它向我显示对象引用未设置为实例。数据源有记录。我不知道发生了什么,请指导我,帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您使用的是as关键字。可能是gvSideMember.DataSource虽然有记录,但不属于DataTable类型,因此(gvSideMember.DataSource as DataTable)null

答案 1 :(得分:1)

如果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"];

答案 2 :(得分:0)

你可以在语句之前测试nullity - 在下面的例子中我只是记录它们是null,所以你仍然会得到错误,但你可以使用这些检查来决定不执行操作或供应默认等。

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