I have a repeater inside another repeater. How can I display all the fields(surname) from db in an inner repeater. In the function outerRepeater_ItemDataBound
, DataSource
isn't recognized. I don't know exactly where I need to select all the surnames for a specific name.
I have this in my repeater.ascx:
<form id="form1" runat="server">
<div>
<asp:Repeater runat="server" ID="outerRepeater" OnItemDataBound="outerRepeater_ItemDataBound">
<HeaderTemplate>
<table>
<td><th>Name:</th></td>
<td><th>Surname:</th></td>
</table>
</HeaderTemplate>
<ItemTemplate>
<h3><%#DataBinder.Eval(Container.DataItem,"Name")%></h3>
<asp:Repeater runat="server" ID="innerRepeater" >
<ItemTemplate>
<%#Eval("Surname") %>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</div>
</form>
And this in repeater.ascx.cs
public partial class Repeater : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
outerRepeater.DataSource = GetDataSource();
outerRepeater.DataBind();
}
private DataTable GetDataSource()
{
SqlConnection myConnection = new SqlConnection(@"my connection string");
SqlDataAdapter myCommand = new SqlDataAdapter("SELECT Distinct Name FROM Person ORDER BY Name ", myConnection);
DataTable dt = new DataTable();
myCommand.Fill(dt);
myConnection.Close();
return dt;
}
private void Page_Init(object sender, EventArgs e)
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
protected void outerRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
Repeater innerRepeater = e.Item.FindControl("innerRepeater") as Repeater;
DataTable dt = GetSurname();
innerRepeater.DataSource = dt;//here isn't su
innerRepeater.DataBind();
}
}
private DataTable GetSurname()
{
SqlConnection myConnection = new SqlConnection(@"my connection string");
SqlDataAdapter da = new SqlDataAdapter("Select Surname from Person ", myConnection);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}