Repeaterは本当にページングを実現できませんか?
5820 ワード
前提:牛の腹を学ぶ時、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を使用してページングを表示することができます.それらの実現方法はすべて同じである.
実装プロセス:
フロントコード:
バックグラウンドコード:
結果
:
まとめ:これは、データベースからすべてのデータを一度に取り出してコントロールにバインドし、各ページに表示されるレコードに基づいてすべてのデータをページングする偽のページングです.本分ページは了解しましたが、まだ実践していないので、本分ページの到来を楽しみにしています!
背景: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();
}
}
結果
:
まとめ:これは、データベースからすべてのデータを一度に取り出してコントロールにバインドし、各ページに表示されるレコードに基づいてすべてのデータをページングする偽のページングです.本分ページは了解しましたが、まだ実践していないので、本分ページの到来を楽しみにしています!