你调用的对象是空的

时间:2009-09-09 09:46:40

标签: c#

在我执行函数的代码中,我经常得到异常错误,因为“对象引用没有设置为对象的实例”

以下功能如下

private void PageHeaderSetting(Graphics g)
        {
            try
            {
                DataTable dtPageHeader=new DataTable() ;
                dtPageHeader = ds.Tables["Page Header"];
                if (dtPageHeader.Rows.Count != 0)
                {
                    foreach (DataRow dr in dtPageHeader.Rows)
                    {
                        if (dr.ItemArray[0].ToString() != "")
                            PageHeaderText = dr.ItemArray[0].ToString();
                        else
                            PageHeaderText = "";
                        if (dr.ItemArray[1].ToString() != "")
                            PageHeaderFont = (Font)dr.ItemArray[1];
                        else
                            PageHeaderFont = new Font("Tahoma", 18, FontStyle.Bold, GraphicsUnit.Point);
                        if (dr.ItemArray[2].ToString() != "")
                            PageHeaderFormat = AlignmentSetting(dr.ItemArray[2].ToString());
                        else
                            PageHeaderFormat = AlignmentSetting(Convert.ToString(Alignment.Left));
                        if (dr.ItemArray[3].ToString() != "")
                            PageHeaderColor = (System.Drawing.Color)dr.ItemArray[3];
                        else
                            PageHeaderColor = Color.Black;

                        PageFooterText = Word_Wrap(PageHeaderText, PageHeaderFont, g, 0);
                        PageHeader(g);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

我怎样才能解决这个问题。任何人都可以帮助我吗?

从第二行我得到了异常错误 表示在声明数据表并将ds.Tables放入其中之后发生错误

4 个答案:

答案 0 :(得分:6)

此异常意味着您尝试在null对象上调用方法。该异常应该给你一个堆栈跟踪,其中包含它被抛出的行号;这会帮你把它钉一点。你也可以尝试在visual studio中调试它,看看抛出异常的位置&看什么是空的。

答案 1 :(得分:4)

您应该检查实际值,而不是使用ToString()来检查ItemArray中是否有值。检查ItemArray [0] == null和ItemArray [0] == DBNull.Value。

编辑: 从您的评论中看来,您的数据集中可能没有任何名为“Page Header”的数据表。

尝试在行dtPageHeader = ds.Tables["Page Header"];

之后向您的DataTable对象添加空检查

这样的事情:

if (dtPageHeader == null) 
{ 
   // There is no table named Page Header
}

答案 2 :(得分:1)

查看异常中的行号。

您的代码有许多链式调用,这是此异常的常见来源。如果这些链接属性中的任何一个返回null,则链中的“next”调用将失败并显示NullReferenceException。

答案 3 :(得分:0)

其中一个可能是真的:

  • ds为null
  • dtPageHeader中的columun上的值为null