By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
458,009 Members | 1,260 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 458,009 IT Pros & Developers. It's quick & easy.

Nested repeater databinding question

P: n/a
http://ejaconsulting.com/nestedrepea...edRepeater.txt
-----Original Message-----
Doh! The HTML has all been rendered . . .

Right click on this link and select 'Save target as ..'
to get the code in a text file.

Thanks - Ed
-----Original Message-----
I have created an ASP.Net page - see code below -

adapted
from http://support.microsoft.com/default.aspx?

scid=kb;EN-
US;306154 which contains 3 repeaters nested inside of
each other.

When it executes it throws an InvalidCastException when
getting the datasource of the grandchild repeater.
However this datasource is fine for the child repeater - remove the grandchild repeater from the page and it runsas expected.

Can anyone tell me what is wrong with the datasource of
the grandchild repeater? What should it be?

Thanks - Ed
HTML file:
==========
<code>

<%@ Page language="c#"
Codebehind="NestedRepeater.aspx.cs"
AutoEventWireup="false"
Inherits="NestedRepeater.NestedRepeater" %>
<%@ Import Namespace="System.Data" %>

<html>
<head>
<title>Nested Repeater Example</title>
</head>
<body>
<form runat="server" id="Form1">

<!-- start parent repeater -->
<asp:repeater id="parentRepeater" runat="server">
<itemtemplate>
<b>Company : <%# DataBinder.Eval
(Container.DataItem,"CompanyName") %></b><br/>

<!-- start child repeater -->
<asp:repeater id="childRepeater" datasource='<%#
((DataRowView)Container.DataItem).Row.GetChildRo ws
("Customers_Orders") %>' runat="server">

<itemtemplate>
- Order Date : <%# DataBinder.Eval
(Container.DataItem, "[\"OrderDate\"]")%><br/>

<!-- start grandchild repeater -->
<asp:repeater id="grandChildRepeater"
datasource='<%# ((DataRowView)
Container.DataItem).Row.GetChildRows
("Orders_OrderDetails") %>' runat="server">
<itemtemplate>
- - Product ID : <%#
DataBinder.Eval(Container.DataItem, "[\"ProductID\"]")%
<br>

</itemtemplate>
</asp:repeater>
<!-- end grandchild repeater -->

</itemtemplate>
</asp:repeater>
<!-- end child repeater -->

</itemtemplate>
</asp:repeater>
<!-- end parent repeater -->

</form>
</body>
</html>

</code>

Code behind file:
=================
<code>

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NestedRepeater
{
public class NestedRepeater : System.Web.UI.Page
{
protected
System.Web.UI.WebControls.Repeater parentRepeater;

public NestedRepeater()
{
Page.Init += new
System.EventHandler(Page_Init);
}

public void Page_Load(object sender,
EventArgs e)
{
//Create the connection and
DataAdapter for the Customers (parent) table.
SqlConnection cnn = new
SqlConnection("Data Source=(local);Integrated
Security=SSPI;Trusted_Connection=yes;Initial
Catalog=Northwind;");
SqlDataAdapter daCustomers = new
SqlDataAdapter("select CustomerID, CompanyName from
Customers order by CompanyName", cnn);

//Create a second DataAdapter for
the Orders (child) table.
SqlDataAdapter daOrders = new
SqlDataAdapter("select OrderID, CustomerID, OrderDate
from Orders order by OrderDate", cnn);

//Create a third DataAdapter for
the OrderDetails (grandchild) table.
SqlDataAdapter daOrderDetails =
new SqlDataAdapter("select OrderID, ProductID from

[Order
Details] order by OrderID", cnn);

//Create and fill the DataSet.
DataSet ds = new DataSet();
DataTable dtCustomers =
ds.Tables.Add("Customers");
DataTable dtOrders = ds.Tables.Add
("Orders");
DataTable dtOrderDetails =
ds.Tables.Add("OrderDetails");
daCustomers.Fill(dtCustomers);
daOrders.Fill(dtOrders);
daOrderDetails.Fill
(dtOrderDetails);

//Create the relation between the
Customers and Orders tables.
ds.Relations.Add
("Customers_Orders", ds.Tables["Customers"].Columns
["CustomerID"], ds.Tables["Orders"].Columns
["CustomerID"]);

//Create the relation between the
Orders and OrderDetails tables.
ds.Relations.Add
("Orders_OrderDetails", ds.Tables["Orders"].Columns
["OrderID"], ds.Tables["OrderDetails"].Columns
["OrderID"]);

//Bind the Authors table to the
parent Repeater control, and call DataBind.
parentRepeater.DataSource =
ds.Tables["Customers"];
Page.DataBind();

//Close the connection.
cnn.Close();
}

private void Page_Init(object sender,
EventArgs e)
{
InitializeComponent();
}

private void InitializeComponent()
{
this.Load += new
System.EventHandler(this.Page_Load);
}
}
}

</code>
.

.

Nov 17 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.