Archief - [PROG]ASP.NET nested repeater

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Necrolite

Legacy Member
Hallo,
ik heb momenteel een probleem met een repeater in een repeater.
Ik heb talloze sites gezocht en de meeste geven dezelfde oplossing.
Werken met een relatie tussen de tabellen en dan in de 2de repeater datasource aanpassen.
De code voor mijn webpage is als volgt:
Code:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="TicketDynamisch.aspx.vb" Inherits="TicketDynamisch" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Repeater id="KlantGegevens" runat="server">
    <ItemTemplate>
    <%#DataBinder.Eval(Container.DataItem, "Naam")%><br />
    <%#DataBinder.Eval(Container.DataItem, "Voornaam")%><br />
    <asp:Repeater Runat="server" ID="plaats" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("plaatsrelatie") %>'>
    <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "[\"plaats_id\"]")%><br />
    </ItemTemplate>
    </asp:Repeater>
    </ItemTemplate>
    </asp:Repeater>
    </div>
    </form>
</body>
</html>
de bijhorende vb pagina
Code:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration


Partial Class TicketDynamisch
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim oTicket As New Ticket
        Dim voorstellingid As String
        voorstellingid = Request.QueryString("voorstelling_id")
        KlantGegevens.DataSource = oTicket.AlleTicketsKlant(voorstellingid)
        KlantGegevens.DataBind()
    End Sub

End Class
code in de class ticket
Code:
    Public Function AlleTicketsKlant(ByVal voorstellingid As Integer)
        Dim db As New dataTicket
        Dim oDataSet As New DataSet
        oDataSet = db.AlleTicketen(voorstellingid)
        Return oDataSet

en de code in dataticket

Code:
    Public Function AlleTicketen(ByVal voorstellingid As Integer)
        Dim dbConn As New DataClass()
        sqlConn = dbConn.geefConnection
        sqlConn.Open()
        oDataset = New DataSet()
        Dim sSQL As String = "select distinct b.naam, b.voornaam, b.klantnummer,g.titel, a.prijs_betaald, a.order_id from orders a inner join reservatie e on a.order_id = e.order_id INNER join Klant b on a.klant_id = b.klant_id left join korting d on e.korting_id = d.korting_id left join voorstelling f on e.voorstelling_id = f.voorstelling_id left join Productie g on f.productie_id = g.productie_id where f.voorstelling_id =" & voorstellingid & ";"
        Dim oDataAdapter As New SqlDataAdapter(sSQL, sqlConn)
        oDataAdapter.Fill(oDataset, "Klant")
        Dim ssSQL As String = "select plaats_id, order_id, voorstelling_id from reservatie;"
        oDataAdapter.Fill(oDataset, "Plaats")
        sqlConn.Close()
        oDataset.Relations.Add("plaatsrelatie", oDataset.Tables("Klant").Columns("voorstelling_id"), oDataset.Tables("Plaats").Columns("voorstelling_id"))
        Return oDataset
    End Function

De volgende errors geeft hij
Error 3 'DataRowView' is a type and cannot be used as an expression. C:\Documents and Settings\Lander\Mijn documenten\Visual Studio 2005\WebSites\Schoolbond\TicketDynamisch.aspx 16
Error 4 ')' expected. C:\Documents and Settings\Lander\Mijn documenten\Visual Studio 2005\WebSites\Schoolbond\TicketDynamisch.aspx 16
Error 5 Comma, ')', or a valid expression continuation expected. C:\Documents and Settings\Lander\Mijn documenten\Visual Studio 2005\WebSites\Schoolbond\TicketDynamisch.aspx 17
Error 6 Comma, ')', or a valid expression continuation expected. C:\Documents and Settings\Lander\Mijn documenten\Visual Studio 2005\WebSites\Schoolbond\TicketDynamisch.aspx 17 63 C:\...\Schoolbond\
Error 7 'DataRowView' is a type and cannot be used as an expression. C:\Documents and Settings\Lander\Mijn documenten\Visual Studio 2005\WebSites\Schoolbond\TicketDynamisch.aspx 17 79 C:\...\Schoolbond\
Error 8 ')' expected. C:\Documents and Settings\Lander\Mijn documenten\Visual Studio 2005\WebSites\Schoolbond\TicketDynamisch.aspx 17 79 C:\...\Schoolbond\


Code:
    <asp:Repeater Runat="server" ID="plaats" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("plaatsrelatie") %>'>
    <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "[\"plaats_id\"]")%><br />
    </ItemTemplate>

op deze lijnen slaagt da dus.
Dat nested repeater gedoe is maar raar. Kan zijn dat mijn relatie ofzo fout is, maar dan zou hij daar moeten op crashen,hij wilt het zelfs precies ni beginnen lezen.

Iemand die hier ervaring mee heeft?

Necrolite

Legacy Member
btw, als mensen een andere manier weten om het op te lossen ipv een nested repeater. Das ook altijd welkom want schijnt is dit een miserie om het werkend te krijgen?

Fiestaver

Legacy Member
geen goesting om het goed te analyseren maar ik doe het zo
ophalen alles wat in buitenste repeater komt
dan bij den itemdatabound kunde e.item.dataitem ophalen en dan adhv da item waarin nen list,sortedlist of zo zit
e.item.findcontrol("binnensterepeater).datasource=ctype(e.item.dataitem, naarklasse).propertymetlist
databinden en ge hebt het

Necrolite

Legacy Member
Kzal dit eens onmiddellijk proberen ze, ben nu wa aant zien op tutorials hoe dat specifiek ineen zit zodat ik het kan toepassen. Thnx for the tip, kzou er nooit zijn op gekomen om het op die manier te doen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan