Avatar billede websam Nybegynder
07. juni 2005 - 09:56 Der 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 ?

/Websam
Avatar billede snepnet Nybegynder
07. juni 2005 - 10:18 #1
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
Avatar billede websam Nybegynder
07. juni 2005 - 10:21 #2
nej jeg prøver at finde ideet i mit datagrid som er inde i en dataliste !

Jeg har brugt den samme løsning på en anden side og der virker det fint ?!?

/Websam
Avatar billede websam Nybegynder
07. juni 2005 - 10:26 #3
På min anden side bruger jeg følgende sub :

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 ?

/Websam
Avatar billede Syska Mester
07. juni 2005 - 10:29 #4
well, noget må du jo have lavet, når du siger det virker på din anden side....

Sikker på du har det hele med?
Avatar billede websam Nybegynder
07. juni 2005 - 10:36 #5
Jeg sidder lige og tjekker mine dataset af for at være 100% sikker på at jeg har de fornødne data til rådighed :o)

/Websam
Avatar billede websam Nybegynder
07. juni 2005 - 12:18 #6
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.'

/Websam
Avatar billede websam Nybegynder
07. juni 2005 - 12:32 #7
Og en anden ting, er DataRowView overhovedet en del af DataSet ?

/Websam
Avatar billede snepnet Nybegynder
07. juni 2005 - 16:10 #8
hej websam :o)

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.

spørg løs hvis jeg har formuleret mig skidt.

mvh
Avatar billede websam Nybegynder
09. juni 2005 - 14:59 #9
Det har du, men jeg fik det ikke til at virke så jeg fandt en anden løsning, Smid et svar

/Websam
Avatar billede snepnet Nybegynder
09. juni 2005 - 15:12 #10
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
Avatar billede websam Nybegynder
13. juni 2005 - 09:47 #11
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

Msn = martin[snabela]kites[prik]dk

/Websam
Avatar billede snepnet Nybegynder
29. juni 2005 - 20:51 #12
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)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester