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

时间:2011-11-03 12:53:29

标签: 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>

所以“name”和“email”的输出都很好。但是,“活动”和“状态”打印出一个整数代码,我想根据我的参考表将其更改为更具描述性的字符串。

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

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

5 个答案:

答案 0 :(得分:5)

你可以

  1. 处理ItemDataBound事件中的格式
  2. 在您的Page或WebUserControl类中创建公共方法以处理格式化。
  3. 使用选项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>
    

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

答案 1 :(得分: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...";
}

答案 2 :(得分: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";
        }

    }
}

答案 3 :(得分:0)

您可以执行以下操作:

<%# (int)DataBinder.Eval(Container, "DataItem.Active") == 0 ? "Active" : "Inactive" %>

答案 4 :(得分:0)

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

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

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