【问题标题】:Why is a method in the gridview Binding is throwing a NullReferenceException为什么gridview Binding中的方法抛出NullReferenceException
【发布时间】:2011-06-23 15:42:43
【问题描述】:

正如标题所说,我有一个在我的 DataGridView 绑定方法中引发 NullReferenceException 的方法。

这是我的代码(简化):

private void GridViewBinding(string sortExpression, string direction)
        { 

             string lang = string.Empty;
             Regex appnoRegex = new Regex("\\d{4}(-)\\d{4}(-)\\d{1}");
             int colCount = gvData.Columns.Count;

            DataView dv = GetData();
            //DataView dvApplication = GetApplicationsData();

            //Sorting only on postback, else rel. docs won't appear
            if (Page.IsPostBack)
            {
                dv.Sort = sortExpression + " " + direction;
            }

            lblTotal.Text = dv.Count.ToString();

            gvData.DataSource = dv;
            gvData.DataKeyNames = new string[] { "InterventionID", "ItemNumber" };
            gvData.DataBind();

            ChangeHeaders(_docTypeQueryStr, colCount, appnoRegex);
}

改头方法:

private void ChangeHeaders(string DocType, int colCount, Regex appnoRegex)
        {
            switch (DocType.ToUpper())
            {
                //intervention documents
                case "I":
                    lblDocumentTypeTitle.Text = Resources.GeneralResouces.lblTypeTitleInterventionsText;
                    lblIntervenorLastName.Text = Resources.GeneralResouces.lblIntervenorLastNameInterventionText;
                    break;
                //Replies document
                case "R":
                    lblDocumentTypeTitle.Text = Resources.GeneralResouces.lblTypeTitleRepliesText;
                    lblIntervenorLastName.Text = Resources.GeneralResouces.lblIntervenorLastNameRepliesText;
                    break;
                //Answer Documents
                case "AR":
                    lblDocumentTypeTitle.Text = Resources.GeneralResouces.lblTypeTitleAnswersText;
                    lblIntervenorLastName.Text = Resources.GeneralResouces.lblIntervenorLastNameAnswerText;
                    break;
                //if none of teh above
                default:
                    //Notice of consultations
                    if (applicationCount == 0 && !appnoRegex.IsMatch(_eventNoQueryStr))
                    {
                        lblIntervenorLastName.Text = Resources.GeneralResouces.lblIntervenorText;
                    }
                    //Part 1 applications
                    else
                    {
                        //Part 1 applications and notices with applications
                        if (applicationCount != 0 || appnoRegex.IsMatch(_eventNoQueryStr))
                        {
                            lblIntervenorLastName.Text = Resources.GeneralResouces.lblIntervenorWithApplicationsText;
                        }
                    }
                    break;
            }

这是我得到的堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
   Interventions._Default.ChangeHeaders(String DocType, Int32 colCount, Regex appnoRegex) +13
   Interventions._Default.GridViewBinding(String sortExpression, String direction) +331
   Interventions._Default.Page_Load(Object sender, EventArgs e) +888
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

据我了解,错误来自 ChangeHeaders 方法。我尝试将 ChangeHeaders 方法放在 cmets 中,并且没有更多错误。这告诉我错误确实来自 ChangeHeaders 方法。但是,这是我第一次从方法中获得 NUllReferenceException,我不知道为什么会这样做。特别是上述方法在代码中,调用时没有错别字。

如何解决这个问题,谢谢。

【问题讨论】:

  • _docTypeQueryStr 的值是多少?可能您将空值传递给 ChangeHeaders 并且执行 ToUpper() 是错误...
  • 在 ChangeHeader 行放置一个断点并逐步执行代码以查明发生错误的位置。
  • 由于某些原因,它甚至没有命中我的代码中的 gridviewbinding 并在浏览器中抛出错误,因此使用断点进行调试被证明是不可能的(可能是 vs2010 错误?)
  • @eGDEV,这就是问题所在,我很傻,不知道我是怎么忽略的,哈哈,谢谢
  • 我已经添加了答案...

标签: c# asp.net gridview nullreferenceexception


【解决方案1】:

检查 _docTypeQueryStr 的值。

您可能正在将空值传递给 ChangeHeaders 并执行 ToUpper()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2014-03-07
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多