格式化绑定到Repeater的某些项的输出

Per*_*ddy 3 c# asp.net data-binding repeater itemdatabound

例如在后端我将数据绑定到转发器,在前端我正在设置我的转发器:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
   <ItemTemplate>
     <div class="user">
         Name:   <%# DataBinder.Eval(Container, "DataItem.Name")%>
         Email:  <%# DataBinder.Eval(Container, "DataItem.Email")%>
         Active: <%# DataBinder.Eval(Container, "DataItem.Active")%>
         Status: <%# DataBinder.Eval(Container, "DataItem.Status")%>
     </div>
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

所以"名称"和"电子邮件"的输出都很好.但是,"活动"和"状态"打印出一个整数代码,我想根据我的参考表将其更改为更具描述性的字符串.

我猜我可以在转发器的"ItemDataBound"事件中执行此操作,但我仍然坚持下一步应该是什么,即检查我需要修改和更改它们的两个字段.

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Do modifications here
    }
}
Run Code Online (Sandbox Code Playgroud)

jda*_*ies 5

你也可以

  1. 处理ItemDataBound事件中的格式
  2. 在Page或WebUserControl类中创建公共方法以处理格式.

使用选项1将要求您声明一个控件(如标签)来存储每个字段的值,如下所示:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
   <ItemTemplate>
     <div class="user">
             <asp:Label ID="ActiveLabel" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Name")%>'></asp:Label>
     </div>
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

然后在ItemDataBound事件中,您可以找到控件并根据需要设置其值.

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
            Label activeLabel = (Label)e.Item.FindControl("ActiveLabel");

            //Format label text as required
    }
}
Run Code Online (Sandbox Code Playgroud)

使用选项2将要求您创建服务器端可公开访问的方法,您可以这样调用:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
   <ItemTemplate>
     <div class="user">
     Active: <%# FormatActive((string)DataBinder.Eval(Container, "DataItem.Active")) %>
     </div>
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

然后定义一个这样的方法:

public string FormatActive(string input)
{
     //Format as required
     //Return formatted string
}
Run Code Online (Sandbox Code Playgroud)

  • FormatActive()不需要是公共的,只是受保护的. (2认同)