4 Stimmen

SeparatorTemplate von Repeater mit Eval

Ist es möglich, Eval oder eine ähnliche Syntax im SeparatorTemplate eines Repeaters zu verwenden?

Ich möchte einige Informationen über das letzte Element in der Trennvorlage wie folgt anzeigen:

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

In der Hoffnung, dass dabei etwas wie das hier herauskommt:

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

Aber das SeparatorTemplate scheint den Eval()-Aufruf zu ignorieren. Ich habe auch versucht, die vorherige Syntax wie folgt zu verwenden: <%# DataBinder.Eval(Container.DataItem, "ArrivalAirport")%> mit dem gleichen Ergebnis.

Ist es möglich, Informationen über das vorherige Element in einem SeparatorTemplate anzuzeigen? Wenn nicht, können Sie einen alternativen Weg vorschlagen, um diesen Code zu generieren?

感謝

2voto

Dillie-O Punkte 28749

Versuchen Sie dies:

Fügen Sie eine private Variable (oder zwei) in der Klasse Ihres WebFormulars hinzu, die Sie verwenden können, um die Fluginformationen zu erhöhen/zu verfolgen, während Sie die Datenbindung auf der Elementebene durchführen.

Dann können Sie im ItemDatabound-Ereignis eine einfache Bewertung durchführen, ob das databound-Element vom Typ ListItemType.Seperator ist, und auf diese Weise Ihren Trennzeichencode anzeigen/ausblenden/ändern.

Ihre WebForm-Seite würde im oberen Bereich etwa so aussehen:

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

    private int m_FlightStops;

    protected page_load
    {

        // Etc. Etc.

    }
}

Wenn Sie dann zur Datenbindung kommen:

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

...oder etwas in dieser Richtung.

0voto

Hey, ich werde mich mit einer Möglichkeit begnügen, das letzte Element im Repeater zu identifizieren, so dass ich die Erzeugung des Trennzeichens dort vermeiden kann:

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

感謝

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X