Question

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

est à peu près ce que je suis en train de faire. De toute évidence, la mise en œuvre est défectueuse, mais je ne peux trouver aucune information sur la façon dont je vais à ce sujet dans la pratique. Toute aide est appréciée.

Edit: Ce que je suis en train de faire est exactement ajouter un DropDownList pour chaque élément dans ce répéteur, et sur présentation du formulaire, utilisez les ID de chaque réponse oui / non à l'entrée dans une base de données. Le SqlDataReader que j'utilise deux champs:. La teneur en question et la QuestionID

Était-ce utile?

La solution

Je pense que vous seriez mieux d'utiliser le support intégré pour les ID à l'intérieur d'un répéteur. Si l'objectif est de lui attribuer une carte d'identité pour le rendre facile de trouver le bon contrôle après les données a été lié peut essayer quelque chose comme ceci:

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

Ensuite, dans votre code, vous pouvez parcourir les éléments du répéteur afin de trouver l'étiquette que vous cherchez:

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

Un répéteur se compose essentiellement d'une collection de RepeaterItems. Les RepeaterItems sont spécifiées à l'aide de la balise ItemTemplate. Chaque RepeaterItem a son propre ensemble de contrôles qui sont, par la nature même d'un répéteur, associé à l'autre.

Dites que vous tirez les répétiteur à partir d'une base de données. Chaque élément de répéteur représente des données à partir d'une ligne individuelle dans les résultats de la requête. Donc, si vous attribuez la QuestionID à une étiquette et QuestionName à un DropDownList, l'ID de l'étiquette correspondrait avec le nom en déroulant.

Autres conseils

Pouvez-vous supprimer le contrôle à partir du fichier de balisage et accrochez l'événement OnItemDataBound du répéteur. Dans ce cas, vous devriez être en mesure de créer le contrôle déroulant « manuellement », quel que soit l'affectation ID que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top