Repeaterは本当にページングを実現できませんか?


前提:牛の腹を学ぶ時、Gridviewで偽のページを実現することしかできませんでした;Repeaterにはページング機能がないそうです.
背景:Asp.Netでは、Gridview、DataList、Repeaterの3つの強力なリストコントロールが用意されていますが、Gridviewのコントロールだけがページング機能を提供しています.Gridviewに対して、DataListとRepeaterコントロールはスタイルのカスタマイズ性が高いため、DataListまたはRepeaterコントロールを使用してデータを表示するのが好きな場合が多い.では、DataListとRepeaterコントロールでもページングを実現する方法はありますか?
Gridviewがページングを実現できる理由は、PagedDataSourceクラスがGridviewコントロールのプロパティをカプセル化し、Gridviewがページングを実行できるようにするためです.
最後の結論:一般的にGridviewコントロールはPagedDataSourceクラスを使用してデータのページング表示を実現するので、DataListとRepeaterも同様にPagedDataSourceを使用してページングを表示することができます.それらの実現方法はすべて同じである.
実装プロセス:
フロントコード:
 <h1>    </h1>
        <p>
            <asp:Label ID="Label2" runat="server" Text="   :"></asp:Label>
            <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="   " />
            <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="   " />
        </p>
        <asp:Panel ID="Panel1" runat="server" Height="315px">
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate >
                    <tr>
                      <td>
                        <%#DataBinder .Eval (Container .DataItem ,"UserName") %>
                        <%#DataBinder .Eval (Container .DataItem ,"Level") %>
                      </td>
                    </tr>
                </ItemTemplate>

                <AlternatingItemTemplate >
                    <font color="blue">
                    <tr>
                        <td>
                            <%#DataBinder .Eval (Container .DataItem ,"UserName") %>
                            <%#DataBinder .Eval (Container .DataItem ,"Level") %>
                       </td>
                    </tr>
                    </font>
                </AlternatingItemTemplate>

                <HeaderTemplate >
                    <h3>    </h3>
                    <table border ="1">
                        <tr>
                            <td>
                                    
                            </td>
                        </tr>
                </HeaderTemplate>

                <FooterTemplate>
                    </table>
                    <h3>    </h3>
                </FooterTemplate>

                <SeparatorTemplate>
                </SeparatorTemplate>
            </asp:Repeater>
        </asp:Panel>

バックグラウンドコード:
 public partial class repeaterControl : System.Web.UI.Page
    {
        /// <summary>
        ///     
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack) //          ,      (     IsPostback false,      。)
            {
                this.Label3.Text ="1"; //         1
                this.databindToRepeater();//          
            }
        }

        /// <summary>
        ///     
        /// </summary>
        private void databindToRepeater()
        {
            int curpage = Convert .ToInt32 ( this.Label3.Text);//      
            SqlConnection con = DB.createCon();//  DB     
            SqlDataAdapter sda = new SqlDataAdapter();//sqlDataadapter      Dataset DB     
            sda.SelectCommand = new SqlCommand("select * from Users", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "user");// Fill    DataSet              
            System.Web.UI.WebControls.PagedDataSource ps = new PagedDataSource();//    
            ps.DataSource = ds.Tables["user"].DefaultView;//          
            ps.AllowPaging = true;//    
            ps.PageSize =3;//      
            ps.CurrentPageIndex = curpage - 1;//    
            this.Button1.Enabled = true;
            this.Button2.Enabled = true;
            if (curpage ==1)
            {
                this.Button1.Enabled = false;//     1,          

            }
            if (curpage ==ps.PageCount )
            {
                this.Button2.Enabled = false;//       ,          
            }
            this.Repeater1.DataSource = ps;
            this.Repeater1.DataBind();
        }

        /// <summary>
        ///    
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            this.Label3.Text = Convert.ToString(Convert.ToInt32(this.Label3.Text) -1);
            this.databindToRepeater();
        }

        /// <summary>
        ///    
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button2_Click(object sender, EventArgs e)
        {
            this.Label3.Text =Convert .ToString ( Convert.ToInt32(this.Label3.Text) + 1);
            this.databindToRepeater();
        }
    }
       
結果
:
まとめ:これは、データベースからすべてのデータを一度に取り出してコントロールにバインドし、各ページに表示されるレコードに基づいてすべてのデータをページングする偽のページングです.本分ページは了解しましたが、まだ実践していないので、本分ページの到来を楽しみにしています!