Повторитель.NET HeaderTemplate

Удостоверьтесь все страницы, которые Вы создаете, статичны, никакая база данных, и не используют изображения.

На самом деле, это место не делает ЭТОГО плохо.

8
задан Antony Delaney 24 September 2009 в 08:49
поделиться

3 ответа

Trying to do Eval("Field").Property in the header template would throw a null exception.

I would do something like this...

Code Behind

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<SomeData> data = new List<SomeData>();

        data.Add(new SomeData("Bob"));
        data.Add(new SomeData("Joe"));

        Repeater1.DataSource = data;
        Repeater1.DataBind();
    }

    public String FirstnameColumn {
        get { return "Firstname";  } 
    }
}

public class SomeData
{
    public String Firstname { get; set; }

    public SomeData(String firstname) {
        this.Firstname = firstname;
    }
}

Markup

<table>
    <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <tr><td><%= FirstnameColumn %></td></tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr><td><%# Eval("Firstname") %></td></tr>
        </ItemTemplate>
    </asp:Repeater>        
</table>
9
ответ дан 5 December 2019 в 09:26
поделиться

Вы можете переместить заголовок таблицы в свой ItemTemplate следующим образом:

<ItemTemplate>
    <asp:Panel runat="server" Visible='<%# Container.DisplayIndex == 0 %>'>
        <tr>
            <th><%# Eval("Forename").HeaderName %></th>
        </tr>
    </asp:Panel>
    <tr>
        <td><%# Eval("Forename") %></td>
    </tr>
</ItemTemplate>

, хотя это немного расточительно, так как заголовок будет привязан для каждой строки (хотя только первая показанная). Возможно, было бы лучше использовать <% if (...)%> вместо Panel, но я не знаю, как получить доступ к Container.DisplayIndex в этом контексте.

Изменить:

В .net 4.5 Container.DisplayIndex не работает; замените на Container.ItemIndex .

Полный пример:

<ItemTemplate>
    <asp:Panel runat="server" Visible='<%# Container.ItemIndex == 0 %>'>
        <tr>
            <th><%# Eval("Forename").HeaderName %></th>
        </tr>
    </asp:Panel>
    <tr>
        <td><%# Eval("Forename") %></td>
    </tr>
</ItemTemplate>
4
ответ дан 5 December 2019 в 09:26
поделиться

Вы не можете использовать <% #%> синтаксис в HeaderTemplate, потому что он не используется в сценарии привязки данных. Однако вы должны иметь возможность использовать <% =%> , а затем поместить какой-нибудь метод на свою страницу / пользовательский элемент управления, который возвращает заголовок.

3
ответ дан 5 December 2019 в 09:26
поделиться