Finding a Repeater's controls during postback
An aspx example with codebehind.
If it isn't a postback, the data gets bound,
When you click the button, it shows the controls from the repeater without databinding
Label2 doesn't keep it's text the same way because it doesn't use the Text property of the label. It uses a DataBoundLiteralControl inside the label. (Seems like extra controls to me)
<%@ Page language="c#" Codebehind="aspmessageboard.aspx.cs" AutoEventWireup="false" Inherits="ResourcedControls_Examples.aspmessageboard" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>aspmessageboard</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="FlowLayout">
<form id="aspmessageboard" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Label id="Label1" runat="server" Text='<%#DataBinder.Eval( Container.DataItem,"String_Date")%>'>
</asp:Label>
<asp:Label id="Label2" runat="server">
<%#DataBinder.Eval( Container.DataItem,"String_Date2")%>
</asp:Label>
</ItemTemplate>
</asp:Repeater>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ResourcedControls_Examples
{
/// <summary>
/// Summary description for aspmessageboard.
/// </summary>
public class aspmessageboard : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Repeater Repeater1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
Response.Write("Binding Grid<HR>");
DataSet test = new DataSet();
test.Tables.Add();
test.Tables[0].Columns.Add("String_Date",typeof(string));
test.Tables[0].Columns.Add("String_Date2",typeof(string));
test.Tables[0].Rows.Add(new object[]{"1.0","1.1"});
test.Tables[0].Rows.Add(new object[]{"2.0","2.1"});
test.Tables[0].Rows.Add(new object[]{"3.0","3.1"});
Repeater1.DataSource = test;
Repeater1.DataBind();
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
foreach(RepeaterItem item in Repeater1.Items)
{
TextBox textBox = item.FindControl("TextBox1") as TextBox;
Label label = item.FindControl("Label1") as Label;
Label label2 = item.FindControl("Label2") as Label;
Response.Write("Item" + item.ItemIndex + "<HR>");
Response.Write(textBox.ID);
Response.Write(".ID=");
Response.Write(textBox.ID);
Response.Write("<BR >");
Response.Write(textBox.ID);
Response.Write(".Text=");
Response.Write(textBox.Text);
Response.Write("<BR >");
Response.Write(label.ID);
Response.Write(".ID=");
Response.Write(label.ID);
Response.Write("<BR >");
Response.Write(label.ID);
Response.Write(".Text=");
Response.Write(label.Text);
Response.Write("<BR >");
Response.Write(label2.ID);
Response.Write(".ID=");
Response.Write(label2.ID);
Response.Write("<BR >");
Response.Write(label2.ID);
Response.Write(".Text=");
Response.Write(label2.Text);
Response.Write("<BR >");
Response.Write("DataBoundLiteralControl");
Response.Write(".Text=");
DataBoundLiteralControl dbl = label2.Controls[0] as DataBoundLiteralControl;
Response.Write(dbl.Text);
Response.Write("<HR>");
}
}
}
}