之前發過一篇博文,涉及到了在GRIEVIEW中捕獲子控制項的方法。奈何GRIDVIEW過於龐大,在追求效率的今天顯得過於笨重。 正好有在Repeater中捕獲子控制項的需求,於是在查閱了相關文檔和幾經失敗嘗試之後得出了下面的一些經驗和收穫與大家分享。
首先我們先來瞭解一下實現以上功能會涉及到的一些知識。以MSND為參考。
MSDN樣本分析
<%@ Page Language="C#"AutoEventWireup="True"%>
<%@ Import Namespace="System.Data"%>
<html>
<head>
<script language="C#"runat="server">
void Page_Load(Object Sender, EventArgs e)
{
if(!IsPostBack)
{
ArrayList values =new ArrayList();
values.Add(newPositionData("Item 1","$6.00"));
values.Add(newPositionData("Item 2","$7.48"));
values.Add(newPositionData("Item 3","$9.96"));
//為Repeater準備資料,核心步驟,只有Repeater中已經綁定了資料才
//可能擷取到需要的項和控制項
Repeater1.DataSource = values;
Repeater1.DataBind();
}
}
void Button_Click(Object Sender, EventArgs e)
{
Label1.Text ="The Items collection contains: <br>";
foreach(RepeaterItem item in Repeater1.Items)
{ //讀取對應項的值
Label1.Text += ((DataBoundLiteralControl)item.Controls[0]).Text +
"<br>";
//擷取控制項
Label2.Text += ((Label)item.Controls[0].FindControl("lable2")).Text +
"<br>";
}
}
public class PositionData
{
private string item;
private string price;
public PositionData(string item,string price)
{
this.item = item;
this.price = price;
}
public string Item
{
get { return item; }
}
public string Price
{
get{ return price; }
}
}
</script>
</head>
<body>
<form runat=server>
<h3>Repeater Example</h3>
<p>
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<table border=1>
<tr>
<td><b>Item</b></td>
<td><b>Price</b></td>
<td><b>Label</b></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> <%# DataBinder.Eval(Container.DataItem,"Item") %> </td>
<td> <%# DataBinder.Eval(Container.DataItem,"Price") %> </td>
//這裡我們添加一個伺服器端測試控制項
<td><asp:Label ID="lable2" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "Price") %>'></asp:Label></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<p>
<asp:Button id=" Button1"Text="Display Items in Repeater" OnClick="Button_Click" runat="server"/>
<br><br>
<asp:Label id="Label1" runat="server"/>
</form>
</body>
</html>
總結:在資料繫結的前提下,擷取Repeater的項和子控制項才能成為可能