Avatar billede karsten_larsen Praktikant
09. januar 2007 - 22:38 Der er 14 kommentarer og
2 løsninger

Dropdownlist i en Repeater giver NullReferenceExeption

Prøver på at få en dropdownlist til at genereres i en repeater med følgende code.


Dim i As Integer
Dim ddl As DropDownList = CType(Repeater1.FindControl("ddlTest"), DropDownList)
For i = 0 To 100
  ddl.Items.Add(New ListItem(i, i))
Next
ddl.DataBind()

men får fejl: NullReferenceExeption was unhandled by user code

Hvordan kommer jeg videre?

??:-) karsten_larsen
Avatar billede mikkel_sommer Nybegynder
10. januar 2007 - 09:17 #1
prøv med Repeater.Controls.FindControl("dllText")
Avatar billede karsten_larsen Praktikant
10. januar 2007 - 10:59 #2
okay - prøver det lige
Avatar billede karsten_larsen Praktikant
10. januar 2007 - 11:31 #3
Det kan ikke lade sige gøre: controls.Findcontrol
Avatar billede thrytter Nybegynder
10. januar 2007 - 12:19 #4
Du bliver nødt til at gennemløbe repeateren, og for hvert element / række lave en FindControl og derefter fylde hver enkelt DropDownListe med data.
Avatar billede thrytter Nybegynder
10. januar 2007 - 12:21 #5
Eller fange hver enkelt DropDownList i repeateren's ItemDataBound
Avatar billede dr_chaos Nybegynder
10. januar 2007 - 12:21 #6
hvordan er dropdownlisten tilføjet til repeateren ?
Avatar billede karsten_larsen Praktikant
10. januar 2007 - 12:33 #7
<td>
<asp:DropDownList  ID="ddlTest" runat="server">
</asp:DropDownList>
</td>
Avatar billede thrytter Nybegynder
10. januar 2007 - 12:42 #8
Private Sub rptTest_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptTest.ItemDataBound
  Dim ddl As DropDownList

  Select Case e.Item.ItemType
    Case ListItemType.AlternatingItem, ListItemType.Item   
      ddl = CType(e.Item.FindControl("ddlTest"), DropDownList)

      ' DataBinding eller andet
  End Select
End Sub
Avatar billede dr_chaos Nybegynder
10. januar 2007 - 12:43 #9
du kan gøre sådan her:
<asp:DropDownList  ID="ddlTest" runat="server" onLoad="drp_onload">
</asp:DropDownList>


Protected Function drp_onload(ByVal sender As Object, ByVal e As eventargs) As String
Dim drp As Dropdownlist = CType(ConversionHelpers.AsWorkaround(sender, GetType(Dropdownlist)), Dropdownlist)

For i = 0 To 100
  drp .Items.Add(New ListItem(i, i))
Next
End Function
Avatar billede karsten_larsen Praktikant
10. januar 2007 - 13:20 #10
hmm - jeg har ikke stødt på ConversionHelpers hvor findes den henne

Imports ?
Avatar billede dr_chaos Nybegynder
10. januar 2007 - 13:23 #11
prøv lige med
Dim drp As Dropdownlist = CType(sender, Dropdownlist)
Avatar billede karsten_larsen Praktikant
10. januar 2007 - 13:32 #12
hmm - så forlanger den i declared og når det sker kommer følgende fejl "Function 'drp_onload' doesn´t reurn a value on all code paths..."
Avatar billede dr_chaos Nybegynder
10. januar 2007 - 13:35 #13
det har noget at gøre med min manglende vb viden.

prøv lige med:

Protected Sub drp_Onload(ByVal sender As Object, ByVal e As eventargs)
Dim drp As Dropdownlist = CType(ConversionHelpers.AsWorkaround(sender, GetType(Dropdownlist)), Dropdownlist)

For i = 0 To 100
  drp .Items.Add(New ListItem(i, i))
Next
End Sub
Avatar billede karsten_larsen Praktikant
10. januar 2007 - 13:59 #14
Jeg er ikke i stand til at afgører, hvilket svar der er bedst, så jeg fordeler point mellem jer dr_chaos(50) og thrytter(10), da jeg bruger dr_choas løsning fremover. Vil I begge lave et svar og tak for hjælpen begge to.
:-) karsten_larsen
Avatar billede dr_chaos Nybegynder
10. januar 2007 - 14:01 #15
svar :)
Avatar billede thrytter Nybegynder
10. januar 2007 - 14:10 #16
svar - foretrækker min egen, da jeg helst vil undgå kode som "kaldes" direkte fra aspx siden.
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

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