4

こんにちは、リピーター内に階層情報 (4 つのレベルがある) を表示する必要があります。このために、ネストされたリピーター コントロールを使用することにしました。MSDN でこの記事を見つけました。http://support.microsoft.com/kb/306154では、2 レベルの情報にネストされたリピーターを使用する方法を示しています。誰かがこれを 4 レベルに拡張するのを手伝ってくれませんか? サンプルコードは非常に高く評価されます。ありがとうございました。

4

4 に答える 4

0

最初の回答に基づいて、ItemDataBound 関数でテーブルを作成する代わりに、テーブル データを渡しPage_Loadて ViewState 変数に設定し、バインド時に取得できます。

private DataTable GetCachedDataTable(string strTable)
{
    DataTable dtableCached = (DataTable)this.ViewState[strTableCache];
    return dtableCached;
}
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        this.ViewState["TblTwo_Cache"] = null;
        DataTable tblOne = new DataTable();
        DataTable tblTwo = new DataTable();
        myFunctionReturningTwoTables(ref tblOne, ref tblTwo);

        // Bind the first one
        if (tblOne != null)
        {
            // This first line assumes an <asp:Panel ID=pnlMain runat=server> 
            // tag is added in front of the Repeater1 tag in the ASPX markup, above,
            // and an </asp:Panel> tag is after the last </asp:Repeater> tag
            Repeater rptr = pnlMain.FindControl("Repeater1") as Repeater;
            rptr.ItemDataBound += new RepeaterItemEventHandler(rptrItemDataBound);
            rptr.DataSource = tblOne;
            rptr.DataBind();
        }
        // Cache the 2nd (and others...) like this
        if (tblTwo != null)
        {
            this.ViewState["TblTwo_Cache"] = tblTwo;
        }
    }
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater rptr2 = e.Item.FindControl("Repeater2") as Repeater;
        if (rptr2 != null)
        {
            DataTable dt = new DataTable();
            // Now, pull it out of cache
            dt = GetCachedDataTable("TblTwo_Cache");
            if (dt != null)
            {
                rptr2.DataSource = dt;
                rptr2.DataBind();
            }
        }
    }
}
于 2014-05-29T04:13:16.360 に答える
0

インターネット上で利用可能な多くの例があります。以下はその一部です。

http://www.codeproject.com/Tips/563919/Nested-Repeater-Controls-in-ASP-NET

http://support.microsoft.com/kb/326338

以下のリンクからコードをダウンロードすることもできます。 http://everymanprogrammer.com/index.php/nested-repeaters-do-it-clean-and-simple-a-beginners-tutorial-part-2/

于 2013-07-01T06:24:06.313 に答える
0

厳密に型指定されたデータ型を使用している場合ItemTypeは、コントロールで使用できるプロパティを使用することをお勧めします。これにより、ネストされたコントロールのプロパティを、ネストされたリピーターごとに同じ手順に従って<asp:Repeater>簡単に設定できます。DataSource<asp:Repeater><%#Container.DataItem %>

コードサンプル:

<asp:Repeater ID="associatedDataRepeater" runat="server">
  <ItemTemplate>

    <asp:Repeater runat="server" DataSource='<%#Container.DataItem %>'>
      <ItemTemplate>

      </ItemTemplate>
    </asp:Repeater>

  </ItemTemplate>
</asp:Repeater>

于 2015-05-27T05:07:54.087 に答える