Повторитель ASP.NET: возможно ли отобразить на первом элементе один элемент, но не на остальные элементы? - PullRequest
1 голос
/ 01 февраля 2011
<asp:Repeater ID="Repeater_RatingQuestions_Individuals" runat="server">
                <ItemTemplate>
                    <asp:Label CssClass="bold center" ID="Label1" runat="server"     Text='<%# DataBinder.Eval(Container.DataItem,"Question")%>' />
                    <asp:Repeater ID="Repeater_RatingAnswers_Individuals" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "Answers") %>'>
                        <HeaderTemplate>
                            <table cellpadding="5" cellspacing="8">
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr>
                                <td>
                                    <asp:Label ID="Label3" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"UserID")%>' />
                                </td>
                                <td>
                                    <asp:Label ID="Label4" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Answer") %>' />
                                </td>
                                <td>
                                    <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Value") %>' />
                                </td>
                            </tr>
                        </ItemTemplate>
                        <FooterTemplate>
                            </table>
                        </FooterTemplate>
                    </asp:Repeater>
                </ItemTemplate>
            </asp:Repeater>

Это мой ретранслятор. У меня есть 2 класса:

public class cQuestion
{
    public string Question { get; set; }
    public List<cAnswer> Answers { get; set; }
}
public class cAnswer
{
    public string Answer { get ; set; }
    public uint Value { get; set; }
    public string UserID { get; set; }
}

Не создавая какого-либо другого общего списка объекта, можно ли будет отобразить для первой записи UserID во вложенном репитере, но для остальных из них не будет показан UserID? Если это невозможно, тогда я просто пойду с альтернативными решениями. Я просто хотел узнать, возможно ли это без добавления новых свойств или новых классов. Заранее спасибо.

1 Ответ

2 голосов
/ 01 февраля 2011

Извините, если это немного (я не использовал Repeater в течение очень долгого времени).Вы пытались вызвать функцию Code Behind из ретранслятора?

<asp:Repeater ID="Repeater_RatingQuestions_Individuals" runat="server">
    <ItemTemplate>
        <asp:Label CssClass="bold center" ID="Label1" runat="server"     Text='<%# DataBinder.Eval(Container.DataItem,"Question")%>' />

        <%# SetShowIDToTrue() %>

        <asp:Repeater ID="Repeater_RatingAnswers_Individuals" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "Answers") %>'>
            <HeaderTemplate>
                <table cellpadding="5" cellspacing="8">
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <asp:Label ID="Label3" runat="server" Text='<%# ShouldThisBeWrittenOut(DataBinder.Eval(Container.DataItem,"UserID"))%>' />
                    </td>
                    <td>
                        <asp:Label ID="Label4" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Answer") %>' />
                    </td>
                    <td>
                        <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Value") %>' />
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

Тогда в вашем коде позади

private bool ShowUID { get; set; }

private int? ShouldThisBeWrittenOut(int UserID)
{
    if (ShowUID) {
        ShowUID = false;
        return UserID;
    } else {
        return null;
    }
}

private void SetShowIDToTrue()
{
    ShowUID = true;
}
...