Toon posts:

[VB.NET / ASP.NET] Meerdere relaties in Dataset

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik probeer volgens dit artikel een aantal tabellen hierarchish in een repeater te zetten.
Ik heb de tabellen Page, PageSubject en Subject. Ik maak vervolgens een Dataset en maak 2 relaties om deze aan elkaar te koppelen zoals hieronder:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
' Dit dan drie keer.

    sql = "SELECT * "
    sql += " From PageSubject "

    Dim daPageSubject As SqlDataAdapter = New SqlDataAdapter(sql, System.Configuration.ConfigurationSettings.AppSettings("DiaConnStr"))
    daPageSubject.Fill(ds, "PageSubject")

'Maak twee relaties

    Dim rel1 As DataRelation = New DataRelation("PageToPageSubject", ds.Tables("Page").Columns("PageId"), ds.Tables("PageSubject").Columns("PageId"), False)
    ds.Relations.Add(rel1)

    Dim rel2 As DataRelation = New DataRelation("PageSubjectToSubject", ds.Tables("PageSubject").Columns("SubjectId"), ds.Tables("Subject").Columns("SubjectId"), False)
    ds.Relations.Add(rel2)


In Page_Load vul ik de eerste repeater met de Page tabel.

code:
1
2
3
4
5
    Dim res As DataSet = New DataSet
    res = db.GetSearchResults(str, conn)

    Repeater1.DataSource = res.Tables("Page").DefaultView
    Repeater1.DataBind()


In ItemDataBound van de eerste repeater, wil ik dan de geneste repeater vullen met pagesubject.
Hier staat het ook voor de derde tabel.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
 Private Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
      CType(e.Item.FindControl("Repeater2"), Repeater).DataSource = CType(e.Item.DataItem, DataRowView).CreateChildView("PageToPageSubject")
      CType(e.Item.FindControl("Repeater2"), Repeater).DataBind()
    End If
  End Sub

  Private Sub Repeater2_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater2.ItemDataBound
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
      CType(e.Item.FindControl("Repeater3"), Repeater).DataSource = CType(e.Item.DataItem, DataRowView).CreateChildView("PageSubjectToSubject")
      CType(e.Item.FindControl("Repeater3"), Repeater).DataBind()
    End If
  End Sub


De html ziet er zo uit

code:
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
37
38
39
<asp:Repeater id="Repeater1" runat="server">
    <HeaderTemplate>
        <table width="100%" border="0" cellspacing="0" cellpadding="2" >
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td align="left" valign="middle">   
                <%# DataBinder.Eval(Container.DataItem,"Title") %>
            </td>
        </tr>
        <asp:Repeater id="Repeater2" runat="server">
            <HeaderTemplate>
            </HeaderTemplate>
            <ItemTemplate>  
            <tr>
                <td align="left" valign="middle">   
                <%# DataBinder.Eval(Container.DataItem,"PageSubjectId") %>
                </td>
            </tr>
                <asp:Repeater id="Repeater3" runat="server">
                    <HeaderTemplate>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr>
                            <td align="left" valign="middle" style="text-indent: 10px;">    
                                <%# DataBinder.Eval(Container.DataItem,"Text") %>
                            </td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
            <FooterTemplate>
            </FooterTemplate>
        </asp:Repeater>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>


Hier komt dan mijn probleem. De eerste twee tabellen laat ie goed zien, zoals in het artikel staat. Maar voor de tweede relatie gaat het niet goed. Hij komt niet in de ItemDataBound voor Repeater2, terwijl hij wel de data laat zien.

Alvast bedankt

Verwijderd

Topicstarter
Ik zat nog ff verder te zoeken en ik kwam dit tegen: link. Ja, het is duits, maar de code is leesbaar :P
Deze doet het via een functie, die aangeroepen word vauit de datasource property. Het werkt iig, maar snap eigenlijk niet zo waarom dat andere het niet deed en dit wel?

Toch bedankt,

mvg