[asp.net] Nested repeater probleem

Pagina: 1
Acties:

  • shades
  • Registratie: September 2001
  • Laatst online: 17-12-2025
Ik heb moeite om een specifiek geval van een nested repeater werkend te krijgen. De manier (gegevens ophalen, in dataset plaatsen, relaties leggen etc) is allemaal geen probleem - namelijk niet de eerste keer dat ik zou iets doe maar met deze krijg ik "The relation is not parented to the table to which this DataView points."

Ik heb 3 tabellen (mssql2000):
tblGroepen (GroepId, GroepNaam)
1 - Groep A
2 - Groep B
3 - Groep C

tblAuteurs (AuteurId, AuteurNaam)
1 - Auteur A
2 - Auteur B
3 - Auteur C

tblGroepenAuteurs (fkGroepId, fkAuteurId) (met clusted unique index) erop zodat een auteur in meerdere groepen kan zitten
1 - 1
1 - 3
2 - 2
2 - 1
3 - 3

relatie tblgroepen -> tblgroepenauteurs = 1 op veel
relatie tblauteurs -> tblgroepenauteurs = 1 op veel

Ik haal op tblAuteurs en een nieuwe tabel die als volgt is samen gesteld (tblGroepenJoined):

SQL:
1
2
select GroepId, fk_AuteurId, GroepNaam from tblGroepen
    inner join tblGroepenAuteurs on tblGroepen.GroepId = tblGroepenAuteurs.fk_GroepId


Levert me de volgende lijst op:
1 - 1 - Groep A
1 - 3 - Groep A
2 - 2 - Groep B
2 - 1 - Groep B
3 - 3 - Groep C

Dit moet genoeg zijn voor de nested repeaters

De relatie die in regel 8 wordt gedefinieerd koppelt tblAuteurs.AuteurId aan de gejoinde tblGroepenJoined.fk_AuteurId. repAuteurs_ItemDataBound regelt dat bij iedere rij die de repAuteurs maakt (uit de tblAuteurs) de rijen uit tblGroepenJoined waarin fk_AuteurId = AuteurId. Als ik de stacktrace mag geloven treedt de fout op in regel 25.

Heeft iemand een idee waarom dit niet werkt. Alles is volgens mij volgens de regels gedaan...

In asp.net gebeurd het volgende:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Page_Load()
{
    DataSet dSet= new DataSet()
    // code voor ophalen gegevens zijn weggelaten
    dSet.Tables[0].TableName = "tblAuteurs";
    dSet.Tables[1].TableName = "tblGroepenJoined"; // inner join tblGroepen en tblGroepenAuteurs
    // relaties leggen
    dSet.Relations.Add("relAuteur",dSet.Tables["tblAuteurs"].Columns["AuteurId"],dSet.Tables["tblGroepenJoined"].Columns["fk_AuteurId"]);
    // bind eerste repeater
    repAuteurs.DataSource = dSet.Tables["tblAuteurs"];
    repAuteurs.DataBind();
}

protected void repAuteurs_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    ListItemType lt = e.Item.ItemType;
    if(lt == ListItemType.Item || lt == ListItemType.AlternatingItem)
    {
        DataRowView dv = e.Item.DataItem as DataRowView;
        if(dv != null)
        {
            Repeater nestedRepeater = e.Item.FindControl("repGroepen") as Repeater;
            if (nestedRepeater != null)
            {
                nestedRepeater.DataSource = dv.CreateChildView("relAuteurs");
                nestedRepeater.DataBind();
            }
        }
    }       
}

private void InitializeComponent()
{    
    // overige events weggelaten
    this.repAuteurs.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.repAuteurs_ItemDataBound); // itemdatabound event toevoegen
}


repeaters (troep weer weggelaten:
HTML:
1
2
3
4
5
6
7
8
9
10
<asp:Repeater id="repAuteurs" runat="server" >
    <ItemTemplate>
        <%# DataBinder.Eval(Container, "DataItem.AuteurNaam") %>
        <asp:repeater id="repGroepen" runat="server">
            <ItemTemplate>
                <%# DataBinder.Eval(Container, "DataItem.GroepNaam") %></td>
            </ItemTemplate>
        </asp:repeater>                     
    </ItemTemplate>
</asp:Repeater>

https://k1600gt.nl


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

code:
1
2
dSet.Relations.Add("relAuteur",dSet.Tables["tblAuteurs"].Columns["AuteurId"],dSet.Tables["tblGroepenJoined"].Columns["fk_AuteurId"]);
nestedRepeater.DataSource = dv.CreateChildView("relAuteurs");


Heb je niet een 's' te weinig/teveel?

Skill is when luck becomes a habit.


  • shades
  • Registratie: September 2001
  • Laatst online: 17-12-2025
het zal toch niet 8)7


.... ja toch wel |:(


:o schaam me dood, halve dag op zitten staren

https://k1600gt.nl