Asp.net 中继器';带Eval的分离模板

Asp.net 中继器';带Eval的分离模板,asp.net,data-binding,repeater,eval,Asp.net,Data Binding,Repeater,Eval,在中继器的SeparatorTemplate中是否可以使用Eval或类似语法 Id'是否显示分隔符模板中最后一项的某些信息,如下所示: <table> <asp:Repeater> <ItemTemplate> <tr> <td><%# Eval("DepartureDateTime") %></td>

在中继器的SeparatorTemplate中是否可以使用Eval或类似语法

Id'是否显示分隔符模板中最后一项的某些信息,如下所示:

<table>
    <asp:Repeater>
        <ItemTemplate>
            <tr>
                <td><%# Eval("DepartureDateTime") %></td>
                <td><%# Eval("ArrivalDateTime") %></td>
            </tr>
        </ItemTemplate>
        <SeparatorTemplate>
            <tr>
                <td colspan="2">Change planes in <%# Eval("ArrivalAirport") %></td>
            </tr>
        </SeparatorTemplate>
    <asp:Repeater>
<table>
<table>
    <asp:Repeater>
            <tr>
                <td>2009/01/24 10:32:00</td>
                <td>2009/01/25 13:22:00</td>
            </tr>
            <tr>
                <td colspan="2">Change planes in London International Airport</td>
            </tr>
            <tr>
                <td>2009/01/25 17:10:00</td>
                <td>2009/01/25 22:42:00</td>
            </tr>
    <asp:Repeater>
<table>

换机
希望它能产生如下结果:

<table>
    <asp:Repeater>
        <ItemTemplate>
            <tr>
                <td><%# Eval("DepartureDateTime") %></td>
                <td><%# Eval("ArrivalDateTime") %></td>
            </tr>
        </ItemTemplate>
        <SeparatorTemplate>
            <tr>
                <td colspan="2">Change planes in <%# Eval("ArrivalAirport") %></td>
            </tr>
        </SeparatorTemplate>
    <asp:Repeater>
<table>
<table>
    <asp:Repeater>
            <tr>
                <td>2009/01/24 10:32:00</td>
                <td>2009/01/25 13:22:00</td>
            </tr>
            <tr>
                <td colspan="2">Change planes in London International Airport</td>
            </tr>
            <tr>
                <td>2009/01/25 17:10:00</td>
                <td>2009/01/25 22:42:00</td>
            </tr>
    <asp:Repeater>
<table>

2009/01/24 10:32:00
2009/01/25 13:22:00
在伦敦国际机场换机
2009/01/25 17:10:00
2009/01/25 22:42:00
但是SeparatorTemplate似乎忽略了Eval()调用。我还尝试使用前面的语法,如下所示:结果相同

是否可以在单独的模板中显示上一项的信息?如果没有,您能建议一种生成此代码的替代方法吗


谢谢

嘿,我会用一种方法来确定中继器中的最后一项,这样我就可以避免在那里生成分隔符:

<table>
    <asp:Repeater>
        <ItemTemplate>
            <tr>
                <td><%# Eval("DepartureDateTime") %></td>
                <td><%# Eval("ArrivalDateTime") %></td>
            </tr>
            <% if (<<<isn't the last item>>) { %>
            <tr>
                <td colspan="2">Change planes in <%# Eval("ArrivalAirport") %></td>
            </tr>
            <% } %>
        </ItemTemplate>
    <asp:Repeater>
<table>

试试这个:

在WebForm类中添加一个(或两个)私有变量,您可以使用该变量在项目级别执行数据绑定时增加/跟踪航班信息

然后在ItemDatabound事件中,如果要进行数据绑定的项是ListItemType.Separator类型,则可以执行简单的计算,并以这种方式显示/隐藏/修改分隔符代码

您的Web表单页面顶部的外观如下所示:

public partial class ViewFlightInfo : System.Web.UI.Page
{

    private int m_FlightStops;

    protected page_load
    {

        // Etc. Etc.

    }
}
然后,当您着手进行数据绑定时:

protected void rFlightStops_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Repeater rFlightStops = (Repeater)sender;

    if (e.Item.ItemType == ListItemType.Header)
    {
        // Initialize your FlightStops in the event a new data binding occurs later. 
           m_FlightStops = 0;
    }

    if (e.Item.ItemType == ListItemType.Item
        || e.Item.ItemType == ListItemType.AlternatingItem)
    {
         // Bind your Departure and Arrival Time
         m_FlightStops++;
     }

    if (e.Item.ItemType == ListItemType.Seperator)
    {
       if (m_FlightStops == rFlightStops.Items.Count - 1)
       {
           PlaceHolder phChangePlanes = 
                    (PlaceHolder)e.Item.FindControl("phChangePlanes");
           phChangePlanes.Visible = false;
       }
    }
 }

…或类似的内容。

此解决方案依赖于rFlightStops.Items.Count拥有完整的项目数,而我的测试表明情况并非如此。它包含到目前为止已添加的项目数。因此它不会检测到最后一行。rFlightStops可能没有完整的项目数,但rFlightStops.DataSource应该具有完整的项目数。