0

リピーター内にドロップダウンをロードしていますが、リピーターが表示されません。なぜ表示されないのですか?

aspx:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">    
    <ItemTemplate> 
       <table>
           <tr>
             <td>
               <asp:DropDownList ID="DropDownList1" runat="server">                     
                  <asp:ListItem>Select</asp:ListItem> <asp:ListItem>Left</asp:ListItem> 
                  <asp:ListItem>Right</asp:ListItem> 
                  <asp:ListItem>SubString</asp:ListItem>
               </asp:DropDownList> 
              <asp:DropDownList ID="DropDownList6" runat="server"> </asp:DropDownList> 

コードビハインド:

 protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

        DataTable dt = new DataTable();
        dt = Common.LoadExample();
        DropDownList ddl = (DropDownList)e.Item.FindControl("DropDownList6") ;
        ddl.DataSource = dt;
        ddl.DataTextField = "Name";
        ddl.DataValueField = "Name";
        ddl.DataBind();

}

// ロード用のデータテーブル

   public static DataTable LoadExample()
    {
        DBAccess objDBAccess = new DBAccess();
        DataTable dt = new DataTable();
        try
        {
            objDBAccess.AddParameter("@Name", SqlDbType.VarChar);
            dt = objDBAccess.ExecuteDataTable("usp_test");
            return dt;
        }
        catch 
        {

            return null;
        }

    }
4

2 に答える 2

0

これは、物事がどうあるべきかを示すための単なる例です。

ASPX ページ:

<asp:Repeater runat="server" ID="rptrTest">
    <ItemTemplate>
        ID: <%#DataBinder.Eval(Container.DataItem, "ID")%>
        <br />
        Name: <%#DataBinder.Eval(Container.DataItem, "Name")%>
        <br />
        Select: <asp:DropDownList runat="server" ID="ddlSelect" />
        <br /><br />
    </ItemTemplate>
</asp:Repeater>

Page_Init で、"AutoEventWireUp = true"ASPX 側にない場合は、リピーターの ItemDataBound イベントをバインドする必要があります。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    rptrTest.ItemDataBound +=
        new RepeaterItemEventHandler(rptrTest_ItemDataBound);
}

Page_Load 時:

protected void Page_Load(object sender, EventArgs e)
{
    // This is an example, but you should get this data from database
    List<File> myObjects = new List<File>(new[]
    {
        new File { ID = 1, Name = "Foo", AListOfStrings = stringList },
        new File { ID = 2, Name = "Bar", AListOfStrings = stringList },
        new File { ID = 3, Name = "Baz", AListOfStrings = stringList },
        new File { ID = 4, Name = "Quux", AListOfStrings = stringList }
    });

    rptrTest.DataSource = myObjects;
    rptrTest.DataBind();
}

リピーターの ItemDatabound イベント:

void rptrTest_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    {
        // Find the DropDownList in the repeater's ItemTemplate
        // so we can manipulate it.
        DropDownList ddlSelect =
            e.Item.FindControl("ddlSelect") as DropDownList;
        if (ddlSelect == null) return;

        DataTable dt = new DataTable();
        dt = Common.LoadExample();

        ddlSelect .DataSource = dt;
        ddlSelect .DataTextField = "Name";
        ddlSelect .DataValueField = "Name";
        ddlSelect .DataBind();
    }
}
于 2012-10-31T09:55:26.830 に答える
0

その理由は、をチェックしていないためItemTypeだと思います。したがって、ヘッダーにはが含まれておらずDropDownList、項目のみが含まれているため、例外が発生しています。

protected void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
    // This event is raised for the header, the footer, separators, and items.
    // Execute the following logic for Items and Alternating Items.
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
        // ...
    }
}

もちろん、リピーターが表示されない理由は他にもあります。

  • Repeaterまたはそのコンテナ コントロールの 1 つがVisible="false"
  • それDataSourceはnullまたは空です
  • まったくデータバインドしていません
  • .... (コードがなければ、さらに支援することは困難です)

編集コメントせずに、重要な情報で質問を編集してください。

ブレークポイントがリピーター アイテムのデータ バインド内に入っていない – 初心者 25 分前

次に、それがないDataBindか、DataSourcenull または空です。データソースを割り当ててデータバインドを呼び出すコードを表示する必要があります。

于 2012-10-31T09:47:21.140 に答える