Avatar billede tknudsen Nybegynder
13. august 2002 - 17:14 Der er 12 kommentarer og
1 løsning

nested repeater

Kan jeg putte een repeater inden i en anden så jeg kan vise en 1-til-mange relation ?
Avatar billede odegaard Nybegynder
13. august 2002 - 17:19 #1
Jeps det kan man godt. Så skal du bare binde den "indsattes" data ved itemonbound evented
Avatar billede jakobandersen Nybegynder
13. august 2002 - 17:21 #2
Der er et eksempel i ibuyspy på nestede datalists, der kan du låne fra:

http://www.ibuyspyportal.com/sourceviewer/srcview.aspx?path=Discussion.src&file=DesktopModules/Discussion.ascx
Avatar billede odegaard Nybegynder
13. august 2002 - 17:29 #3
Kommer lige med et eksempel. Det er et udklip/omskrivning af min egen kode, så der kan godt være et par småfejl...

code:
--------------------
Public Sub repeat1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
    'Find repeat-komponent i sub-items
    Dim rep2 as Repeater = cType(e.Item.FindControl("repeat2"),Repeater)

    'Vi vil kun binde dataset til repeater hvis der er tale om et "item" eller et "alternateItem"
    If not CType(e.Item.ItemType, ListItemType) = ListItemType.Item and not CType(e.Item.ItemType, ListItemType) = ListItemType.AlternatingItem Then
        Exit Sub
    End If

    rep2.datasource=MinInterneDatasource
    rep2.databind
End Sub

html:
---------------------
<asp:Repeater id=repeat1 runat="server" OnItemDataBound="repeat1_ItemDataBound" EnableViewState="False" >
    <itemTemplate>
        Her er lidt tekst - ID=<%# Container.DataItem("ID") %>"><br />
        <asp:Repeater id=repeat2 runat="server"/>
    </itemTemplate>
</asp:Repeater>
Avatar billede tknudsen Nybegynder
14. august 2002 - 12:35 #4
odegaard >> jeg får en fejl:

"Object reference not set to an instance of an object"

>>Line 56:     objOSList.DataSource = objDS.Tables("tblOS").DefaultView<<

fra denne kode:

sub oslist_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
    dim objOSList as Repeater = cType(e.Item.FindControl("oslist"),Repeater)

    dim objConn as new OleDbConnection(strDBConnection)
    dim strSQL as String
    strSQL = "SELECT OS FROM tblOS"

    dim objCmd as new OleDbDataAdapter(strSQL,objConn)
    dim objDS as DataSet = new DataSet()
    objCmd.Fill(objDS,"tblOS")
    objOSList.DataSource = objDS.Tables("tblOS").DefaultView
    objOSList.DataBind()
end sub


som om objOSList ikke bliver oprettet !?

i dit eksempel laver du kun databind hvis ' der er tale om et "item" eller et "alternateItem"' - hvorfor - og hvad betyder det ?
Avatar billede tknudsen Nybegynder
14. august 2002 - 12:41 #5
html:

<asp:Repeater id="tweaklist" runat="server" OnItemDataBound="oslist_ItemDataBound" EnableViewState="False">
  <ItemTemplate>
  ...
  <tr>
    <td colspan="2">
    <asp:repeater id="oslist" runat="server" />
    </td>
  </tr>
  </ItemTemplate>
</asp:Repeater>
Avatar billede tknudsen Nybegynder
14. august 2002 - 12:50 #6
det er sføli galt med det ovestående html - så jeg har ændret det til følgende:

<asp:Repeater id="tweaklist" runat="server" OnItemDataBound="oslist_ItemDataBound" EnableViewState="False">
  <ItemTemplate>
  ...
  <tr>
    <td colspan="2">
    <asp:repeater id="oslist" runat="server">
      <HeaderTemplate><table><tr></HeaderTemplate>
      <ItemTemplate><td><%# Container.DataItem("OS") %></td></ItemTemplate>
      <FooterTemplate></tr></table></FooterTemplate>
    </asp:repeater>
    </td>
  </tr>
  </ItemTemplate>
</asp:Repeater>
Avatar billede odegaard Nybegynder
14. august 2002 - 12:55 #7
det er fordi eventet også bliver udført når den f.eks. laver header og footer, men disse indeholder jo ikke kontrollen "oslist", hvorfor den vil fejle.
Mht. object reference... prøv at tilføje new og se om det skulle hjælpe (vildt gæt):
dim objOSList as New Repeater = cType(e.Item.FindControl("oslist"),Repeater)
Avatar billede tknudsen Nybegynder
14. august 2002 - 12:55 #8
...men stadig samme fejl !?
Avatar billede tknudsen Nybegynder
14. august 2002 - 13:00 #9
ok - det retter også fejlen...

Jeg satte den if-sætning ind (item eller alternate item) og så funger det.

Kan jeg sende en parameter med over til den ItemDataBound metode ? Jeg laver jo en sql query. Lige nu er den harcoded, men den skulle gerne variere afhængig af data fra den yderste repeater !?!
Avatar billede odegaard Nybegynder
14. august 2002 - 13:05 #10
ja, du kan jo hente værdier fra e.Item
Det kunne jo f.eks. være en ID fra det "ydre" dataset, som skal benyttes i en SQL i det "indre" dataset.
Avatar billede tknudsen Nybegynder
14. august 2002 - 13:07 #11
ja - det sidder jeg også lige og roder med...
Avatar billede tknudsen Nybegynder
14. august 2002 - 13:45 #12
hvad type er <input type="hidden" runat="server" /> iforbm. casting via ctype ?
Avatar billede odegaard Nybegynder
14. august 2002 - 14:01 #13
kan du ikke bare bruge en asp:TextBox ?
Skal du lave hidden-værdier, kan du jo med fordel i stedet gemme værdierne i viewstate.
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