ASP.Net Repeater控件

时间:2009-05-26 16:58:43

标签: asp.net repeater

我一直在努力尝试改变asp:repeater控件中行的颜色。 我想要做的是:基于一个值,我希望能够在转发器控件中设置记录的颜色。 我试过DIV标签,无法使其正常工作。 我该怎么做? Thaks

3 个答案:

答案 0 :(得分:5)

使用<%#%> ItemTemplate中的数据绑定语法用于执行条件格式化:

<asp:Repeater runat="server" ID="rpt">
  <ItemTemplate>
    <div class="<%# Container.ItemIndex % 2 ? "even" : "odd" %>">
    </div>
    <div class="<%# Eval("PropertyOfDataSource") %>">
    </div>
  </ItemTemplate>
</asp:Repeater>

答案 1 :(得分:4)

背后的代码中尝试这样的事情
  protected void rpt_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.DataItem != null)
        {
            string color = (string)DataBinder.Eval(e.Item.DataItem, "RowColor");
            HtmlTableRow rowToColor = (HtmlTableRow)e.Item.FindControl("Row");
            rowToColor.Attributes.CssStyle.Add("background-color", color );
        }
    }

和aspx页面中的类似内容

<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_OnItemDataBound">
    <ItemTemplate>
        <tr id="Row" runat="server">
            <td>
            &nbsp;
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

答案 2 :(得分:0)

您可以通过许多不同的方式解决这个问题,具体取决于转发器需要的样子或发送给它的数据,没有最佳答案。这是一个黑客解决方法,它将评估数据并将其与正确的颜色响应进行比较。

在转发器的项目模板中,用div包围它。

<div style="background-color:<%# GetBG((string)(DataBinder.Eval(Container.DataItem,"DataField")))%>">

并且在后面的代码中有一个决定

的功能
public string GetBG(string demo)
    {

        if (demo == "TestData2")
            return "yellow";
        return "Green";
    }

这不是一个非常好的方法,而且非常浪费。 onDataBind函数是更好的方法,只是想展示另一种方法来完成这项任务。