【发布时间】: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