2011-02-07 3 views
1

По какой-то причине я получаю отказ от объекта, не установленный в экземпляр объекта.объект refrence не установлен в экземпляр объекта

Protected Sub GridView6_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)  
     Dim date1 As Date  
     date1 = Date.Now  
     Dim date2 As Date  

     Dim ddate As Label = CType(e.Row.FindControl("label1"), Label)   
     date2 = Date.Parse(ddate.Text)   
     Dim ts As TimeSpan = date2.Subtract(date1)   
     Dim days As Integer = ts.TotalDays    
     If days <= 14 Then    
     e.Row.ForeColor = System.Drawing.Color.Red   
     ElseIf days > 14 And ts.Days < 30 Then 
     e.Row.ForeColor = System.Drawing.Color.Blue   
     ElseIf days >= 30 Then 
     e.Row.ForeColor = System.Drawing.Color.LightGreen   
    End If   
    End Sub 

Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 166: 
Line 167:  Dim ddate As Label = CType(e.Row.FindControl("label1"), Label) 
Line 168:  date2 = Date.Parse(ddate.Text) 
Line 169:  Dim ts As TimeSpan = date2.Subtract(date1) 
Line 170:  Dim days As Integer = ts.TotalDays 

Source File: C:\Documents and Settings\ChrisH\Desktop\AJAXEnabledWebSite18\Default.aspx.vb Line: 168

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.] _Default.GridView6_RowDataBound(Object sender, GridViewRowEventArgs e) in C:\Documents and Settings\ChrisH\Desktop\AJAXEnabledWebSite18\Default.aspx.vb:168 System.Web.UI.WebControls.GridView.OnRowDataBound(GridViewRowEventArgs e) +108 System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +167 System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +1651 System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +57 System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14 System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +114 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +31 System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73 System.Web.UI.WebControls.GridView.DataBind() +4 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82 System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +22 System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +17 System.Web.UI.Control.PreRenderRecursiveInternal() +80 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842

+0

Первое, что я предлагаю на самом деле отлаживать код ... начать его, когда ddate создается/устанавливается и проходит. Это, по-видимому, ваша ошибка «нулевой ссылки», которая не поднимает голову до следующей строки. Посмотрите, действительно ли это вытягивает значение из функции CType(). – guildsbounty

+1

Вы должны уметь поставить точку останова в строке 168 и увидеть, что (скорее всего) ddate или ddate.Text имеет значение NULL. Причина будет зависеть от контекста. Является ли этикетка действительно там? У вас есть правильное имя? –

+2

Pro-tip: назовите свои элементы управления. Вам не понравится, когда вы пытаетесь вспомнить, есть ли дата в label23 или label17. –

ответ

3

Говорят, что у вас нет элемента управления, называемого "label1" в строке. Это очень вероятно, так как строка может содержать только Cells. Вы должны иметь доступ к конкретной ячейке по ее колонке на индекс нулевой основе:

Dim ddate As Label = CType(e.Row.Cells(2).FindControl("label1"), Label) 

Имейте в виду, чтобы изменить (2) выше, чтобы соответствовать номер столбца.

Редактировать: Похоже, вы не сделали никаких проверок, чтобы убедиться, что вы смотрите на DataRow против HeaderRow или FooterRow. Вот фрагмент:

Protected Sub GridView6_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) 
    ' CHECK THE ROW TYPE HERE. ONLY EXECUTE ON DataRow  
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim date1 As Date  
     date1 = Date.Now  
     Dim date2 As Date  

     Dim ddate As Label = CType(e.Row.FindControl("label1"), Label)   
     date2 = Date.Parse(ddate.Text)   
     Dim ts As TimeSpan = date2.Subtract(date1)   
     Dim days As Integer = ts.TotalDays    
     If days <= 14 Then    
      e.Row.ForeColor = System.Drawing.Color.Red   
     ElseIf days > 14 And ts.Days < 30 Then 
      e.Row.ForeColor = System.Drawing.Color.Blue   
     ElseIf days >= 30 Then 
      e.Row.ForeColor = System.Drawing.Color.LightGreen   
     End If   
    End If 
End Sub 
+0

@MyHeadHurts. Результат состоит в том, что ярлык не существует с именем, которое вы указали в местах, где вы «он говорит, чтобы искать. Имейте в виду, что 'FindControl' - очень специфический метод и вовсе не рекурсивный. Он будет выглядеть только в 'ControlCollection' объекта, на который вы его называете. Когда вы отлаживаете, вы можете зайти в свое «немедленное» окно и сделать этот вызов во всех столбцах, чтобы убедиться, что у вас есть нужный индекс столбца. –

+0

Я сделал это для каждого столбца, и все ничего не вернули – MyHeadHurts

+0

@MyHeadHurts - тогда я бы сказал, что у вас нет элементов управления с именем 'label1', определенных в ваших шаблонах, или, по крайней мере, определенных в шаблоне, к которому вы в данный момент обращаетесь. Имейте в виду, что вы не отфильтровываете строку заголовка. Я предоставлю редактирование. –

3

ddate является null, потому что нет label1.

+0

wait ddate имеет значение null, но date2 - это время, которое не имеет никакого смысла. – MyHeadHurts

+0

и label1 существует, хотя – MyHeadHurts

Смежные вопросы