Repeater无刷新分页
網上摘錄?
前臺:
?<html xmlns="http://www.w3.org/1999/xhtml">
? <head id="Head1" runat="server">
???? <title>CallBack</title>
???? <script language="javascript" type="text/javascript">
???????? function turnPage(pageIndex) {
???????????? CallServer(pageIndex, 'content');
???????? }
???????? function ReceiveCallback(arg, context) {
???????????? var container = document.getElementById(context);
???????????? //alert(arg + "? " + context); //有興趣你可以看看運行時到底顯示什么東西
???????????? container.innerHTML = arg;
???????? }
???? </script>
?
?</head>
?<body>
???? <form id="form1" runat="server">
???? <div id="content">
???????? <asp:Repeater ID="List" runat="server" OnItemDataBound="List_ItemDataBound">
???????????? <ItemTemplate>
???????????????? <div>
???????????????????? 用戶名:<asp:Label ID="NickName" runat="server"></asp:Label>
???????????????????? QQ號:<asp:Label ID="QNumber" runat="server"></asp:Label>
???????????????? </div>
???????????? </ItemTemplate>
???????? </asp:Repeater>
???? </div>
???? <asp:Literal ID="Pager" runat="server"></asp:Literal>
???? </form>
?</body>
?</html>
?
后臺:
? using System;
? using System.Data;
? using System.Web;
? using System.Text;
? using System.Web.UI;
? using System.Web.UI.HtmlControls;
? using System.Web.UI.WebControls;
? using System.IO;
? using System.Globalization;
namespace WebApplication4
{
??? public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
??? {
??????? //每頁顯示記錄數
??????? static int PAGESIZE = 4;
??????? DataTable dt = null;
??????? private int currentPageIndex;
??????? protected void Page_Load(object sender, EventArgs e)
??????? {
??????????? if (!IsPostBack)
??????????? {
??????????????? BindList(1, true); //綁定數據
??????????????? //獲取用于回調的
??????????????? string callbackReference = ClientScript.GetCallbackEventReference(this, "arg", "ReceiveCallback", "content", false);
??????????????? string callbackScript = string.Format("function CallServer(arg,content){{ {0} }}", callbackReference);
??????????????? ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
??????????????? //這3條語句你都可以不要修改直接照抄,功能是將后臺的代碼直接注冊到前臺中并執行。
??????????? }
??????? }
??????? /**/
??????? /// <summary>
??????? /// 綁定列表
??????? /// </summary>
??????? /// <param name="pageIndex">翻頁頁碼</param>
??????? /// <param name="needRender">是否需要重畫分頁面碼</param>
??????? protected void BindList(int pageIndex, bool needRender)
??????? {
??????????? DataTable dt = GetData();? //獲取數據
??????????? //計算總頁數
??????????? int pages = (dt.Rows.Count % PAGESIZE == 0) ? dt.Rows.Count / PAGESIZE :(dt.Rows.Count / PAGESIZE) + 1;
??????????? if (needRender) //true 執行
??????????????? RenderPager(pages);? //繪制出分頁
??????????? if (pageIndex > pages)//似乎沒用
??????????????? pageIndex = pages;
??????????? else if (pageIndex < 1)
??????????????? pageIndex = 1;
??????????? int startId = (pageIndex - 1) * PAGESIZE + 1;? //起始頁
??????????? int endId = pageIndex * PAGESIZE;? //末尾頁
??????????? DataRow[] rows = dt.Select(string.Format("ID>={0} and ID<={1}", startId, endId));
??????????? List.DataSource = rows;
??????????? List.DataBind();
??????????//這里是數據的綁定,如果你一直按照他的思路,那你就完了,因為原作者是自己臨時寫的數據源,而你的數據源是在數據庫中
????????? //所以修改代碼是必須的。這里用到了分頁的類PagedDataSource
?????????//???DataTable dt = GetData();? //獲取數據
??????????//? //計算總頁數
??????????//? int pages = (dt.Rows.Count % PAGESIZE == 0) ? dt.Rows.Count / PAGESIZE : (dt.Rows.Count / PAGESIZE) + 1;
?????????//?? if (needRender)
??????????//? {
??????????//????? RenderPager(pages);? //繪制出分頁
??????????//? }
??????????//? PagedDataSource pds = new PagedDataSource();
??????????//? pds.DataSource = questionTable.DefaultView;
??????????//? pds.AllowPaging = true;
??????????//? pds.PageSize = 5;
??????????//? if (pageIndex == 0)
???????????// {
???????????//???? pageIndex = 1;
???????????// }
??????????? //設置分頁對象的當前索引
???????????// pds.CurrentPageIndex = pageIndex - 1;?? //由這個控制分頁顯示的數據內容
???????????// test.DataSource = pds;
???????????// test.DataBind();
??????? }
??????? /**/
??????? /// <summary>
??????? /// 畫出分頁頁碼???? 大家用時都可以不用修改了
??????? /// </summary>
??????? /// <param name="pages"></param>
??????? protected void RenderPager(int pages)
??????? {
??????????? StringBuilder sb = new StringBuilder();
??????????? int pageIndex = 1;
??????????? do
??????????? {
??????????????? sb.AppendFormat("<a href='javascript:turnPage({0});'>{0}</a> ",pageIndex);
??????????? } while (pageIndex++ < pages);
??????????? Pager.Text = sb.ToString();
??????? }
??????? /**/
??????? /// <summary>
???????/// 初始化一個DataTable作數據源? 就是獲取數據并以DataTable形式返回? 以便BindList調用
??????? /// </summary>
??????? protected DataTable GetData()
??????? {
??????????? if (null == Cache["Data"])
??????????? {
??????????????? dt = new DataTable();
??????????????? dt.Columns.Add("ID", typeof(int));
??????????????? dt.Columns.Add("NickName", typeof(string));
??????????????? dt.Columns.Add("QNumber", typeof(string));
??????????????? DataRow row = dt.NewRow();
??????????????? row["ID"] = 1;
??????????????? row["NickName"] = "人物1";
??????????????? row["QNumber"] = "21243468";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 2;
??????????????? row["NickName"] = "人物2";
??????????????? row["QNumber"] = "9058307";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 3;
??????????????? row["NickName"] = "人物3";
??????????????? row["QNumber"] = "21243468";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 4;
??????????????? row["NickName"] = "人物4";
??????????????? row["QNumber"] = "22526451";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 5;
??????????????? row["NickName"] = "人物5";
??????????????? row["QNumber"] = "254852182";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 6;
??????????????? row["NickName"] = "人物6";
??????????????? row["QNumber"] = "81461006";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 7;
??????????????? row["NickName"] = "人物7";
??????????????? row["QNumber"] = "375772376";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 8;
??????????????? row["NickName"] = "人物8";
??????????????? row["QNumber"] = "153534649";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 9;
??????????????? row["NickName"] = "人物9";
??????????????? row["QNumber"] = "619468";
??????????????? dt.Rows.Add(row);
??????????????? row = dt.NewRow();
??????????????? row["ID"] = 10;
??????????????? row["NickName"] = "人物10";
??????????????? row["QNumber"] = "83223563";
??????????????? dt.Rows.Add(row);
??????????????? Cache["Data"] = dt;
??????????? }
??????????? else
??????????? {
??????????????? dt = Cache["Data"] as DataTable;
??????????? }
??????????? return dt;
?????? ??? //顯然原作者只是為了演示無刷新功能,才自己寫數據源(從整個代碼來看,可見原作者功底之深厚)
????????? //那么我們就得寫自己的獲取數據代碼
????????? //這個就不用我寫了吧,只要從數據庫獲取后以DataTable的形式返回即可。
??????? }
??????? #region? 實現ICallbackEventHandler 成員RaiseCallbackEvent#region 實現ICallbackEventHandler 成員RaiseCallbackEvent
??????? //這個就是實現無刷新的回調方法了。
?????? //其實我們所說的無刷新分頁,只是看上去不刷新,其運行時數據還是刷新的,要不然怎么讓不同的頁面顯示不同的內容呢?
?????? //它是以回調的機制獲取新的數據流然后再將新的數據流重新繪制顯示出來
??????? public void RaiseCallbackEvent(string eventArgument)
??????? {
??????????? currentPageIndex = Convert.ToInt32(eventArgument);
??????????? BindList(currentPageIndex, false);
??????? }
??????? public string GetCallbackResult()
??????? {
??????????? //返回再次綁定后的Repeater的表現內容
??????????? return RenderControl(List);
??????? }
???????#endregion
??????? /**/
??????? /// <summary>
??????? /// 獲取指定控件重畫的內容
??????? /// </summary>
??????? /// <param name="control"></param>
??????? /// <returns></returns>
??????? private string RenderControl(Control control)
??????? {
??????????? StringWriter writer1 = new StringWriter(CultureInfo.InvariantCulture);
??????????? HtmlTextWriter writer2 = new HtmlTextWriter(writer1);
??????????? control.RenderControl(writer2);
??????????? writer2.Flush();
??????????? writer2.Close();
??????????? return writer1.ToString();
??????? }
?
????????//顯示數據
???????? //顯示數據這個一般自己有自己定義的顯示數據形式,所以這個可以根據自己需求修改它,你設置可以不要它,自己重新來寫
??????? protected void List_ItemDataBound(object sender, RepeaterItemEventArgs e)
??????? {
??????????? if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==ListItemType.AlternatingItem)
??????????? {
??????????????? Label NickName = e.Item.FindControl("NickName") as Label;
??????????????? Label QNumber = e.Item.FindControl("QNumber") as Label;
??????????????? DataRow row = e.Item.DataItem as DataRow;
??????????????? NickName.Text = row["NickName"].ToString();
??????????????? QNumber.Text = row["QNumber"].ToString();
??????????? }
??????? }
??? }
}
轉載于:https://www.cnblogs.com/Yellowshorts/archive/2012/11/28/2792202.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Repeater无刷新分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这个世界太小了,刚才我们老师搞块板给我,
- 下一篇: 创建一个重写