2009-05-20 11 views
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> 

これはおおよそ私がやろうとしていることです。明らかに、実装には問題がありますが、実際にこれについてどうやって行くかについての情報はありません。どんな助けもありがとうございます。リピータ内部のWebControl IDを変更する

編集:私はこのRepeaterの各アイテムにDropDownListを追加し、フォームの提出時に、それぞれのYes/No回答のIDを使用してデータベースに入力します。私が使用しているSqlDataReaderには、2つのフィールドがあります:質問内容とquestionID。

+0

このような動的IDをコントロールに与えることはできません。何をしようとしているのかを教えてください(なぜ動的IDが必要なのですか?)、それに答えることができます。歓声 –

答えて

4

リピーター内の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> 

、あなたのコードでは、あなたが内の項目をループのことができます。目標は、それをデータは、あなたがこのような何かを試す可能性があるバインドされた後、適切なコントロールを見つけるためにそれを容易にするIDを割り当てることがある場合あなたが探しているラベルを見つけるまで、リピーター:

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

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

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

+0

フォームを読み込んだときに各レコードのQuestionIDにIDを設定して、それらのIDと対応する値をsprocで使用できるようにする必要があります。 –

+0

これは簡単です。各ラベル/テキストボックス/ etcにIDを割り当て、QuestionIDを隠しラベルとして追加すると、RepeaterItemのFindControlメソッドを使用してこれらのコントロールにアクセスできます。 – Jason

+0

さて、FindControlについてもっと読む必要があります。隠れたラベルのIDを関連付けられたDropDownListと関連付ける方法を理解しています。 –

0

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

関連する問題