Pergunta

<ItemTemplate>
    <asp:Label runat="server"><%#DataBinder.Eval(Container.DataItem, "Question")%></asp:Label>
    <asp:DropDownList runat="server" id="<%#DataBinder.Eval(Container.DataItem, "QuestionID")%>">>
        <asp:ListItem value="1" text="Yes" />
        <asp:ListItem value="0" text="No" />
    </asp:DropDownList>
<ItemTemplate>

Este é mais ou menos o que eu estou tentando fazer. Obviamente, a implementação está com defeito, mas não consigo encontrar qualquer informação sobre como eu iria sobre isso em prática. Qualquer ajuda é apreciada.

Edit: O que eu estou tentando fazer exatamente é adicionar um DropDownList para cada item nesta Repeater, e mediante apresentação do formulário, utilize o ID do de cada Sim / Não resposta a entrada em um banco de dados. O SqlDataReader que eu estou usando tem dois campos:. O conteúdo pergunta ea QuestionID

Foi útil?

Solução

Eu acho que você seria melhor fora de usar o suporte embutido para IDs dentro de um Repeater. Se o objetivo é atribuir um ID para tornar mais fácil para encontrar o controle adequado após os dados terem sido ligado que você pode tentar algo como isto:

<asp:Repeater ID="Repeater1" runat="server>
    <ItemTemplate>
        <asp:Label ID="QuestionID" Visible="False" Runat="server"><%#DataBinder.Eval(Container.DataItem, "FieldContent")%></asp:Label>
        <asp:DropDownList ID="MyDropDownList" Runat="server"></asp:DropDownList>
    </ItemTemplate>
</asp:Repeater>

Então, em seu código, você pode percorrer os itens no repetidor até encontrar o rótulo que você está procurando:

foreach (RepeaterItem curItem in Repeater1.Items)
{
    // Due to the way a Repeater works, these two controls are linked together.  The questionID
    // label that is found is in the same RepeaterItem as the DropDownList (and any other controls
    // you might find using curRow.FindControl)
    var questionID = curRow.FindControl("QuestionID") as Label;
    var myDropDownList = curRow.FindControl("MyDropDownList") as DropDownList;
}   

Um repetidor consiste basicamente de uma coleção de RepeaterItems. Os RepeaterItems são especificados usando a tag ItemTemplate. Cada RepeaterItem tem seu próprio conjunto de controles que são, pela própria natureza de um repetidor, associados uns com os outros.

Digamos que você está puxando os dados do repetidor de um banco de dados. Cada item Repeater representa dados de uma linha individual nos resultados da consulta. Então, se você atribuir o QuestionID a um rótulo e na QuestionName a um DropDownList, o ID na etiqueta iria corresponder-se com o nome no menu suspenso.

Outras dicas

Você pode remover o controle do arquivo de marcação, e gancho evento OnItemDataBound do repetidor. Nesse caso, você deve ser capaz de criar o controle suspenso "manualmente", atribuindo tudo o ID que você deseja.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top