0
    <form>
<asp:Repeater id="rptComments" runat="server">
    <HeaderTemplate>
        <table class="detailstable FadeOutOnEdit">
            <tr>   
                <th style="width:200px;">Answers</th> 
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <th style="width:200px;"><asp:DropDownList ID="dropDownForChecklistAnswers" runat="server" /></th>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
        <asp:Button id="button" text="Submit" OnClick="Page_Load" runat="server" />
    </FooterTemplate>
</asp:Repeater>
</form>

コードビハインド:

 List<Checklist_Record_Choice> CLRC =
            (from choice in db.Checklist_Record_Choices
             select choice).ToList();

        dropDownForChecklistAnswers.DataSource = CLRC;

        DropDownList1.DataTextField = Text;//Text being the name of column2 in the table (which contains yes, no, n/a)

        dropDownForChecklistAnswers.DataBind();

エラー: dropDownForChecklistAnswers は現在のコンテキストに存在しませんか??? お知らせ下さい


編集; 返信ありがとう。私は持っている

public void OnReptDataBound(object sender, RepeaterItemEventArgs e)
{
    ClarkeDBDataContext db1 = new ClarkeDBDataContext();
    List<string> CLRC =
    (from choice in db1.Checklist_Record_Choices
     select choice.Text).ToList();

    DropDownList ddl = (DropDownList)e.Item.FindControl("dropDownForChecklistAnswers");
    ddl.DataSource = CLRC;
}

しかし、オブジェクト ref がオブジェクトのインスタンスに設定されていないため、DropDownList ddl が戻ってきます...なぜ null なのですか??

4

1 に答える 1

1

リピーターのテンプレートの一部であるコントロールにアクセスするには、FindControlを使用する必要があります。

OnItemDataBoundリピーターのをサブスクライブします(属性を設定しますOnItemDataBound="OnReptDataBound"

そして、背後にあるコードで次のことを行います

void OnReptDataBound(object sender, RepeaterItemEventArgs e)
{
   if(e.Item.ItemType == ListItemType.Item) 
   {
     DropDownList ddl = (DropDownList )e.Item.FindControl("dropDownForChecklistAnswers");
     ddl.DataSource = ....
于 2013-03-03T21:27:16.387 に答える