今天要給repeater做上一個checkbox,然後能做到圈選反選,本來很簡單的事,但是我發現了findcontrol方法的一個好的優點。
前台Binder 方法如下:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate><asp:CheckBox ID="ch" runat="server" /></ItemTemplate>
</asp:Repeater>
後台代碼如下:
foreach (Control c in this.Repeater1.Controls)
{
CheckBox check = (CheckBox)c.FindControl("ch");
if (check != null)
{
check.Checked = true;
}
}
好像細看沒什麼神奇,但是,從html代碼中,你看到repeater產生的html代碼如下:
<INPUT id=Repeater1_ctl00_ch type=checkbox name=Repeater1$ctl00$ch>
<INPUT id=Repeater1_ctl03_ch type=checkbox name=Repeater1$ctl03$ch>
地球人都知道伺服器端的id到了用戶端就極有可能在asp.net產生控制項樹的時候被asp.net自動重新命名,為的防止一個頁面多個重複id,那為什麼在回傳的時候後台又能夠通過findcontrol("ch")來擷取到呢?這就是asp.net為我們作的工作了。
順便說說3種獲得repeater中的checkbox 的方法:
foreach( RepeaterItem item in this.Repeater1.Items )
{
HtmlInputCheckBox check = (HtmlInputCheckBox)item.FindControl("cbDelete1");
if( check != null )
{
check.Checked = true;
}
}
for (int i=0;i<this.Repeater1.Items.Count;i++)
{
HtmlInputCheckBox check = (HtmlInputCheckBox)this.Repeater1.Items[i].FindControl("cbDelete1");
if( check != null )
{
check.Checked = true;
}
}
foreach (Control c in this.Repeater1.Controls)
{
HtmlInputCheckBox check = (HtmlInputCheckBox)c.FindControl("cbDelete1");
if( check != null )
{
check.Checked = true;
}
}