ASP.NET WebForm開發中儘可能少用系統提供的runat="server"的服務器控件,尤爲像GridView之類的「重量級」武器,自動生成的ViewState實在讓人不敢恭維。可是用Repeater作數據綁定、展現以及表格記錄處理仍是很方便的。html
如頁面要實現下圖效果:
服務器
數據能夠用 <%#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)中進行數據綁定。code
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)中進行。orm
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; } }
或者使用另外一種方法,在每條記錄的操做按鈕事件上處理,例如:server
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 }