Repeater使用詳細指南
ASP.NET WebForm開發中盡量少用系統提供的runat="server"的服務器控件,尤其像GridView之類的“重量級”武器,自動生成的ViewState實在讓人不敢恭維。但是用Repeater做數據綁定、展示以及表格記錄處理還是很方便的。
如頁面要實現下圖效果:
綁定數據
數據可以用 <%#Eval("字段名")%> 這種形式在
<asp:Repeater ID="rpt" runat="server" onitemdatabound="rep_ItemDataBound">
<ItemTemplate>
<%#Eval("ID") %>、<%#Eval("Name") %>、<asp:Label ID="lblSex" runat="server" Text=""></asp:Label>
<br />
</ItemTemplate>
</asp:Repeater>
也可以用另一種方式,在CodeBehind方法rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)中進行數據綁定。
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Label lblTopicID = (Label)e.Item.FindControl("lblTopicID");
lblTopicID.Text = ((TopicType)e.Item.DataItem).TopicID.ToString();
TextBox txtTopicText = (TextBox)e.Item.FindControl("txtTopicText");
txtTopicText.Text = ((TopicType)e.Item.DataItem).Name;
Label lblCreateTime = (Label)e.Item.FindControl("lblCreateTime");
lblCreateTime.Text = ((TopicType)e.Item.DataItem).CreateTime.ToString();
Label lblLastUpdateTime = (Label)e.Item.FindControl("lblLastUpdateTime");
lblLastUpdateTime.Text = ((TopicType)e.Item.DataItem).LastTime.ToString();
}
操作每條記錄
如果想對每條記錄做操作(修改、刪除、置頂等),可以在后台方法rpt_ItemCommand(object source, RepeaterCommandEventArgs e)中進行。
protected void rpt_ItemCommand(object source, RepeaterCommandEventArgs e)
{
RepeaterItem ri = rpt.Items[e.Item.ItemIndex]; //選中行
Label lblTopicID = (Label)ri.FindControl("lblTopicID");
TextBox txtTopicText = (TextBox)ri.FindControl("txtTopicText");
LinkButton lbUpdateTopic = (LinkButton)ri.FindControl("lbUpdateTopic");
int topicID = CommonFunc.ToInt(lblTopicID.Text.Trim());
string topicName = txtTopicText.Text.Trim();
switch (e.CommandName)
{
case "top"://置頂
break;
case "update"://修改
break;
case "del"://刪除
break;
}
}
或者使用另一種方法,在每條記錄的操作按鈕事件上處理,例如:
protected void lbDeleteUser_Click(object sender, EventArgs e)
{
LinkButton lbUpdateUser = (LinkButton)sender;
RepeaterItem ri = (RepeaterItem)lbUpdateUser.NamingContainer; //獲取當前操作的記錄所在行
TextBox txtUID = (TextBox)ri.FindControl("txtUID"); //獲取當前行的ID
Label lblCn1Account = (Label)ri.FindControl("lblCn1Account");
Label lbhiddenID = (Label)ri.FindControl("lbhiddenID");
// Do Something
}