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>");
}
}
}
}