2011-02-12 2 views
0

Je suis nouveau à la programmation, et ont rencontré l'erreur suivante:référence d'objet non définie à une instance d'un objet

System.NullReferenceException was unhandled by user code 
    Message=Object reference not set to an instance of an object. 
    Source=App_Web_hnmuvsif 
    StackTrace: 
     at Default3.DetailsView1_DataBound(Object sender, EventArgs e) in C:\projects\FPOS_v2\photo_view.aspx.vb:line 54 
     at System.Web.UI.WebControls.BaseDataBoundControl.OnDataBound(EventArgs e) 
     at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) 
     at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) 
     at System.Web.UI.WebControls.DataBoundControl.PerformSelect() 
     at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 
     at System.Web.UI.WebControls.DetailsView.DataBind() 
     at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() 
     at System.Web.UI.WebControls.DetailsView.EnsureDataBound() 
     at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() 
     at System.Web.UI.Control.EnsureChildControls() 
     at System.Web.UI.Control.PreRenderRecursiveInternal() 
     at System.Web.UI.Control.PreRenderRecursiveInternal() 
     at System.Web.UI.Control.PreRenderRecursiveInternal() 
     at System.Web.UI.Control.PreRenderRecursiveInternal() 
     at System.Web.UI.Control.PreRenderRecursiveInternal() 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 

Je l'ai utilisé Nouveau pour créer un nouvel objet, mais toujours obtenir la même erreur.

Voici le code:

If IsPostBack Then 
    Session("selectedPhotoID") = DetailsView1.DataKey.Value.ToString() 
    DataList1.DataBind() 
End If 

DetailsView1.Fields(0).Visible = False 
DetailsView1.Fields(2).ShowHeader = False 

DetailsView1.Fields(3).ShowHeader = False 
DetailsView1.Fields(3).ItemStyle.HorizontalAlign = HorizontalAlign.Center 
DetailsView1.Fields(3).ItemStyle.Font.Bold = True 

DetailsView1.HorizontalAlign = HorizontalAlign.Center 

'The code below loops through and selects the photo rather then selecting the first 

If Not String.IsNullOrEmpty(Session("selectedPhotoID")) Then 
    Dim dv As New DetailsView 
    dv = DirectCast(sender, DetailsView) 

    If dv IsNot Nothing Then 
     Dim myDataRowView As DataRowView = TryCast(dv.DataItem, DataRowView) 

     For iRowIndex As Integer = 0 To myDataRowView.DataView.Count - 1 

      If myDataRowView.DataView(iRowIndex).Row(0).ToString() = Session("selectedPhotoID") Then 

       'found record 

       dv.PageIndex = iRowIndex 

       Exit For 

      End If 

     Next 

    End If 
End If 
+1

Sur quelle ligne est l'exception lancée? – BoltClock

+1

Voir http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net –

Répondre

1

Vous devez nous dire la ligne de code qu'il a été jeté, mais je suppose que

Dim myDataRowView As DataRowView = TryCast(dv.DataItem, DataRowView) 

est dv.DataItem un DataRowView? Il retourne Nothing sinon, et vous ne vérifiez pas cela. Sinon, vous faites un très bon travail de vérification, donc il n'y a pas beaucoup d'autres endroits où cela pourrait être.

En aparté: ce code

Dim dv As New DetailsView 
dv = DirectCast(sender, DetailsView) 

pourrait juste être

Dim dv As DetailsView = DirectCast(sender, DetailsView) 

Pas besoin de créer un nouveau puis jeter immédiatement loin. (pas sûr à 100% de ma syntaxe, mais n'appelle pas Nouveau)

+0

Oui, l'erreur est lancé sur la Dim myDataRowView Comme DataRowView = TryCast (dv.DataItem, DataRowView) Quels changements dois-je apporter à cette ligne? – AJsStack

+0

Qu'est-ce que rien? Est-ce dv.DataItem? Exécutez dans le débogueur et trouvez la variable définie sur Nothing. Si c'est le cas - je n'en ai aucune idée - il n'y a pas assez d'informations ici. –

+0

Merci pour votre réponse rapide. L'erreur est lancée sur la ligne: Pour iRowIndex As Integer = 0 Pour myDataRowView.DataView.Count - 1 et ayant vérifié en utilisant le débogueur, c'est dv qui n'est rien. – AJsStack

Questions connexes