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

これは大まかに私がやろうとしていることです。明らかに、実装に問題がありますが、実際にこれをどのように行うかについての情報は見つかりません。どんな助けでも大歓迎です。

編集:私が正確にやろうとしているのは、このリピーターの各アイテムに DropDownList を追加し、フォームの送信時に、各はい/いいえの回答の ID を使用してデータベースに入力することです。私が使用している SqlDataReader には、質問の内容と質問 ID の 2 つのフィールドがあります。

4

2 に答える 2

4

Repeater 内の ID の組み込みサポートを使用する方がよいと思います。ID を割り当てて、データがバインドされた後に適切なコントロールを簡単に見つけられるようにすることが目標である場合は、次のようなことを試してください。

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

次に、コードで、探しているラベルが見つかるまで、Repeater 内の項目をループできます。

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

Repeater は、基本的に RepeaterItems のコレクションで構成されます。RepeaterItems は、ItemTemplate タグを使用して指定されます。各 RepeaterItem には、Repeater の性質上、相互に関連付けられた独自のコントロール セットがあります。

データベースから Repeater データを取得しているとします。各 Repeater アイテムは、クエリ結果の個々の行からのデータを表します。したがって、QuestionID をラベルに割り当て、QuestionName を DropDownList に割り当てると、ラベルの ID がドロップダウンの名前と一致します。

于 2009-05-20T18:36:07.727 に答える
0

マークアップ ファイルからコントロールを削除し、リピーターの onItemDataBound イベントをフックしていただけますか。その場合、必要な ID を割り当てて、「手動で」ドロップダウン コントロールを作成できるはずです。

于 2010-05-04T20:59:59.010 に答える