07. juni 2005 - 09:56Der er
11 kommentarer og 1 løsning
jeg er gået lidt i stå på dette ?
Hejsa,
Jeg har lavet et datagrid inde i en dataliste med OnItemCommand="ShowImage". Koden i ShowImage ser ud som følger :
Sub ShowImage(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim ImageId As Integer Dim Dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid) ImageId = (CType(e.Item.DataItem, DataRowView))("Id")
Response.Write(ImageId) Response.End() End Sub
Men når jeg køre denne så får jeg en fejl der hedder :
'Object reference not set to an instance of an object.'
Med Følgende Stack Trace :
[NullReferenceException: Object reference not set to an instance of an object.] Moduler.ProductUpload.ShowImage(Object sender, DataGridCommandEventArgs e) +73 System.Web.UI.WebControls.DataGrid.OnItemCommand(DataGridCommandEventArgs e) System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26 System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26 System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +120 System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +115 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138 System.Web.UI.Page.ProcessRequestMain() +1277
Er der en der kan fortælle mig hvad jeg gør galt ?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
hej websam .... med den kode du viser skal du jo have et datagrid inde i et datagrid. du har et DataGridCommandEventArgs med, og du prøver at finde et datagrid i dit item.... sådan et har du vel ikke. mvh
Sub ShowSubCategory(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim SubCategoryId As String Dim Dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid) SubCategoryId = (CType(e.Item.DataItem, DataRowView))("Id") Response.Redirect("?m=productlistsub&id=" + SubCategoryId + "") End Sub
Den finder et id i datagridet og smider det i et link der redirectes til og det virker ganske fint, så jeg har lidt svært ved at se hvad forskellen skulle være ?
jeg har testet på kryds og tværs af mine dataset og jeg er i stand til at trække alle de nødvendige oplysninger ud jeg skal bruge og specielt det Id jeg skal bruge for at kunne komme videre og lige lidt hjælper det.
kan en af jer fortælle mig på dansk hvad nedenstående helt nødagtigt betyder :
'Object reference not set to an instance of an object.'
nej - men hvis du databinder et datagrid med et dataset, vil dit dataitem (pr. række) være af typen DataRowView.
'Object reference not set to an instance of an object.' betyder at du forsøger gøre noget med en objectreference der ikke peger på noget (er = null).
du skal være opmærksom på, at du kun har et DataItem til rådighed i forbindelse med databinding - så hvis du har sådan en typisk : if(!IsPostBack)) // do some bindingstuff
vil du ikke kunne tilgå en rækkes dataitem i en itemcommand-eventhandler, og du vil få den fejl du har, da dataitem netop er null.
desuden ... denne eventhandler :
Sub ShowImage(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim ImageId As Integer Dim Dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid) ImageId = (CType(e.Item.DataItem, DataRowView))("Id")
Response.Write(ImageId) Response.End() End Sub
håndterer et event fra et datagrid, og ikke en datalist, og hvis du har et datagrid i en datalist, vil du jo ikke kunne finde et datagrid i et datagrid, hvilket er hvad du gør her :
Dim Dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid)
e.Item er et DataGridItem, og sådan som du har beskrevet det du har lavet har du ikke noget datagrid i et DataGridItem, så hvad enten du kan få det til at fungere et andet sted eller er, er der et eller andet der ikke hænger så godt sammen.
nu betyder det sikkert ikke rigtig noget, da du aldrig benytter variablen Dg (og det er sansynligt at kaldet ikke giver dig en exception... er ikke så kyndig til VB) - men det er lidt meningsforstyrrende at du har kodelinien der.
HAHA - jeg omformulerer bestemt gerne, hvis du gerne vil have det hele med :o) vi kan også tage den over messenger, hvis du smider et eller andet her der gør at jeg kan finde dig på messenger. mvh
Hvorfor er det så lige at jeg kan bruge denne som også er et datagrid i en dataliste det har jeg stadigt svært ved at forholde mig til da det også her er et datagrid i en dataliste og det virker ?
Sub ShowSubCategory(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Dim SubCategoryId As String Dim Dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid) SubCategoryId = (CType(e.Item.DataItem, DataRowView))("Id") Response.Redirect("?m=productlistsub&id=" + SubCategoryId + "") End Sub
damn... en endnu ældre en her :o( jeg finder dig på messenger. mvh (det sidste du gør bruger heller ikke den kontrol du finder med FindControl... Dg bruges jo ikke noget andet sted i koden, så selvom den er null vil du ikke få en fejl)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.