隐藏(隐藏)转发器页脚和/或标题

时间:2013-11-18 16:19:37

标签: c# asp.net webforms repeater

无论如何我可以在转发器中隐藏页脚和/或标题吗?

基本上我有两个中继器绑定到不同的数据源,一个在另一个上面:

<asp:Repeater runat="server" ID="rptAdditionalCosts">
        <HeaderTemplate>
            <table id="optionalExtrasPriceBreakdown" cellpadding="0" cellspacing="0" border="0">
                <thead>
                    <tr>
                        <th colspan="4"> Additional Costs </th>
                    </tr>
                    <tr>
                        <th> Description </th>
                        <th> Quantity </th>
                        <th> Price </th>
                        <th class="totalPrice"> Total Price </th>
                    </tr>
                </thead>
                <tbody>
        </HeaderTemplate>
        <ItemTemplate>
                    <tr>
                        <td><%#DataBinder.Eval(Container.DataItem, "Description")%></td>
                        <td><%#DataBinder.Eval(Container.DataItem, "Count")%></td>
                        <td>£<%# DataBinder.Eval(Container.DataItem, "Gross", "{0:n2}")%></td>
                        <td class="totalPrice">£<%#DataBinder.Eval(Container.DataItem, "Total", "{0:n2}")%></td>
                    </tr>
        </ItemTemplate>
        <FooterTemplate>
                </tbody>
            </table>
            <hr class="spacer" />
        </FooterTemplate>
    </asp:Repeater>
    <asp:Repeater runat="server" ID="rptOptionalExtras">
        <HeaderTemplate>
            <table id="optionalExtrasPriceBreakdown" cellpadding="0" cellspacing="0" border="0">
                <thead>
                    <tr>
                        <th colspan="4"> Additional Costs </th>
                    </tr>
                    <tr>
                        <th> Description </th>
                        <th> Quantity </th>
                        <th> Price </th>
                        <th class="totalPrice"> Total Price </th>
                    </tr>
                </thead>
                <tbody>
        </HeaderTemplate>
        <ItemTemplate>
                    <tr>
                        <td><%#DataBinder.Eval(Container.DataItem, "Description")%></td>
                        <td><%#DataBinder.Eval(Container.DataItem, "Number")%></td>
                        <td>£<%# DataBinder.Eval(Container.DataItem, "UnitCost", "{0:n2}")%></td>
                        <td class="totalPrice">£<%#DataBinder.Eval(Container.DataItem, "TotalCost", "{0:n2}")%></td>
                    </tr>
        </ItemTemplate>
        <FooterTemplate>
                </tbody>
            </table>
            <hr class="spacer" />
        </FooterTemplate>
    </asp:Repeater>

如果它们都包含数据我想要隐藏前面的页脚和后面的页眉,那么它会在HTML中生成一个完整的表。我有bool告诉我它们是否包含数据。

if (optionalVisible && additionalVisible)
{
     //hide rptAdditionalCosts footer
     //and
     //hide rptPerBookingOptionalExtras header
}

问题是转发器似乎不包含任何隐藏或显示页脚或标题模板的选项?我错过了一些明显的东西吗?

3 个答案:

答案 0 :(得分:4)

最后,我设法使用转发器的ItemDataBound事件来处理某些事情:

void rptAdditionalCosts_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Footer)
    {
        if (optionalVisible && additionalVisible)
            e.Item.Visible = false;
    }
}

void rptOptionalExtras_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Header)
    {
        if (optionalVisible && additionalVisible)
            e.Item.Visible = false;
    }
}

感谢@KarlAnderson的回答,我从来没有真正检查过他的解决方案,因为我刚刚开始运行。

答案 1 :(得分:1)

尝试分别将页眉和页脚模板设置为null,如下所示:

if (optionalVisible && additionalVisible)
{
    //hide rptAdditionalCosts footer
    //and
    //hide rptPerBookingOptionalExtras header
    rptAdditionalCosts.FooterTemplate = null;
    rptPerBookingOptionalExtras.HeaderTemplate = null;
}

答案 2 :(得分:1)

我遇到了将模板设置为null而干扰转发器命令的问题。我建议改为设置一个新的BindableTemplateBuilder。

if (optionalVisible && additionalVisible)
{
    //hide rptAdditionalCosts footer
    //and
    //hide rptPerBookingOptionalExtras header
    rptAdditionalCosts.FooterTemplate = new BindableTemplateBuilder();
    rptPerBookingOptionalExtras.HeaderTemplate = new BindableTemplateBuilder();
}