Repeater數據綁定和操作


Repeater使用詳細指南

ASP.NET WebForm開發中盡量少用系統提供的runat="server"的服務器控件,尤其像GridView之類的“重量級”武器,自動生成的ViewState實在讓人不敢恭維。但是用Repeater做數據綁定、展示以及表格記錄處理還是很方便的。

如頁面要實現下圖效果:
demo

綁定數據

數據可以用 <%#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
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM