对于绑定到Repeater的特定项的输出格式化

3
例如,在后台,我将一个数据表绑定到重复器上,在前端,我将我的重复器设置为如下所示:
<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>

所以“name”和“email”的输出是正确的。然而,“Active”和“Status”打印出一个整数代码,我想根据我有的参考表格将其更改为更具描述性的字符串。

我猜我可以在重复器的“ItemDataBound”事件上做到这一点,但我卡在了下一步,即检查我需要修改的两个字段并更改它们。

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Do modifications here
    }
}
5个回答

5

您可以选择以下两种方式进行格式化:

  1. 在ItemDataBound事件中处理格式。
  2. 在页面或WebUserControl类中创建公共方法来处理格式。

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

<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>

然后在您的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
    }
}

使用选项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>

然后定义一个如下的方法:
public string FormatActive(string input)
{
     //Format as required
     //Return formatted string
}

2
FormatActive() 不需要是公共的,只需要是受保护的。 - jrummell

2

我更喜欢在标记中调用格式方法,而不是处理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: <%# FormatActive((int)DataBinder.Eval(Container, "DataItem.Active"))%>
         Status: <%# FormatStatus((int)DataBinder.Eval(Container, "DataItem.Status"))%>
     </div>
    </ItemTemplate>
</asp:Repeater>

然后在你的代码后台:

protected static FormatActive(int active)
{
    return "Formated Active String...";
}

protected static FormatStatus(int status)
{
    return "Formated StatusString...";
}

1
<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
   <ItemTemplate>
     <div class="user">
         Active:   <asp:label id="lblActive" Text='<%# DataBinder.Eval(Container, "DataItem.Active")%>' runat="server" />        
     </div>
    </ItemTemplate>
</asp:Repeater>


protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Do modifications here
        YourObjectName person = (YourObjectName)e.Item.DataItem;
        //you can now ref the object this row is bound to
        //example find a dom element
        Label lblActive= (Label)e.Item.FindControl("lblActive");

        if(person.Active == 2)
        {
            lblActive.Text = "This is great";
        }

    }
}

为什么如果你打算在代码后台设置文本属性,还要将其设置为<%# DataBinder.Eval(Container, "DataItem.Active")%>呢? - samandmoore
谁知道用例是什么,只是向OP展示如何访问数据并更改表单元素。 - rick schott

0
你可以这样做:
<%# (int)DataBinder.Eval(Container, "DataItem.Active") == 0 ? "Active" : "Inactive" %>

0

不需要使用itemdatabound。只需在您的itemtemplate中添加一个方法来使用dataitem.active作为参数进行转换。添加一个标签并执行以下操作:

Text='<%# String.Format("{0}",Conversion(Eval("dataitem.active")))%>'

转换是您在代码后面或实用程序类中留下的方法,您可以在其中进行转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接