repeater,Repeater实现高效分页+静态批量删除(消息模块实现全过程)(一)

最近在做一个消息模块,这个消息模块需求如下:1、写消息,2、列表显示消息,3、根据不同的消息分类检索消息,4、查看消息,快速回复消息,5、批量删除消息,6、未读消息提醒。为实现以上一系列功能我使用了Repeater实现高效分页、JQuery+Ajax技术实现静态批量删除、查看、回复。
1、消息模块数据表
Repeater实现高效分页+静态批量删除(消息模块实现全过程)(一)repeater
2、写消息,直接跳转到一个页面写消息,本篇重点在于Repeater实现高效分页介绍了
3、Repeater实现高效分页
Repeater在数据控件中是一个比较轻量级的控件,这也使得它用起来比较灵活,也是我非常喜欢的一个控件,使用它可以灵活的实现各种功能,在实现消息模块的时候我使用它来是实现了高效分页的功能。(为什么我说是高效分页?这里的分页并不是向其他一些实现分页的方案,是使用PagedDataSource来实现分页,它的把数据全部读出来然后再计算页数,并获取该页的数据,这也的方法在数据量比较大的时候就会导致系统运行比较慢。高效分页是每次只读出相应页数的数据,不会因数据量变大而导致的系统运行速度较慢的情况。)
用到的一个SQLHelper类的一个分页方法
/// /// 分页查询方法,适用于任何表或者视图 /// author:Jerry /// date:2011-7-6 ///直接可以传递要取第几页,就可以取得该页数据,使用了SQL Server2005及以上版本可以计算Row_Number()的特性 /// /// 要查询的字段
/// 要查询的表名或者视图名
/// 要排序的字段名
/// 要查询第几页
/// 返回的最大记录数
/// 查询中用到的参数集合
/// 返回分页查询结果 public DataTable GetPagedDataTable(string selectColumnName, string orderColumnName,string where, string tableName, OrderBy orderBy, int pageIndex, int size, SqlParameter[] parameters) { int startIndex = (pageIndex - 1) * size + 1;//计算开始的位置 int endIndex = pageIndex * size;//计算结束的位置 string orderByString = orderBy == OrderBy.ASC ? " ASC " : " DESC ";//排序方式 StringBuilder buffer = new StringBuilder(); buffer.Append("select * from ("); buffer.AppendFormat("select {0},Row_Number() over (order by {1} {2}) rownum from {3} where {4})temp",selectColumnName,orderColumnName,orderByString,tableName,where); buffer.AppendFormat(" where temp.rownum>={0} and temp.rownum<={1}",startIndex,endIndex); string commText = buffer.ToString(); return ExecuteDataTable(commText,CommandType.Text,parameters); }
实现repeater高效分页的后台代码
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using NS.Entity; namespace erp.SystemManager { public partial class message : System.Web.UI.Page { string id = "123";//id是从session中获取,表示登录人的编号ID protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Message mess = new Message(); //Employee emp = new Employee(); //emp = (Employee)Session["ThisUser"]; string sql = "select top 10 mes_ID,mes_sendPer,mes_title,mes_addTime,mes_type,mes_Status from Message "; sql = sql + " where mes_acceptPer='"+id+"' order by mes_addTime desc"; SqlHelper.SqlDbHelper db = new SqlHelper.SqlDbHelper(); string sql2 = "select count(*) from Message "; sql2 = sql2 + "where mes_acceptPer='"+id+"'"; int countOfpage = int.Parse(db.ExecuteScalar(sql2).ToString()); labCurPage.Text = "1"; labZongShu.Text = countOfpage.ToString(); if (countOfpage % 10 == 0) { labPage.Text = (countOfpage / 10).ToString(); } else labPage.Text = (countOfpage / 10 + 1).ToString(); DataTable dt = new DataTable(); dt = db.ExecuteDataTable(sql); Repeater1.DataSource = newData(dt); Repeater1.DataBind(); } } private static DataTable newData(DataTable dt) { for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["mes_Status"].ToString() == "0") { dt.Rows[i]["mes_Status"] = "未阅读"; } else if (dt.Rows[i]["mes_Status"].ToString() == "1") { dt.Rows[i]["mes_Status"] = "已阅读"; } else { dt.Rows[i]["mes_Status"] = "已回复"; } } return dt; } protected void btnFirst_Click(object sender, ImageClickEventArgs e) { labCurPage.Text = "1"; bind(1); pagecount(); } protected void btnSearch_Click(object sender, EventArgs e) { string where = " and "; string type = DropDownList1.Text; string status = DropDownList2.Text; if (type == "全部类型的消息" && status == "全部状态的消息") { where = ""; } else if (type != "全部类型的消息" && status == "全部状态的消息") { where = where + " mes_type ='"+type+"'"; } else if (type == "全部类型的消息" && status != "全部状态的消息") { if (status == "已阅读") { where = where + "mes_Status='1'"; } else if (status == "未阅读") { where = where + "mes_Status='0'"; } else if (status == "已回复") { where = where + "mes_Status='2'"; } } else { if (status == "已阅读") { where = where + "mes_Status='1'"; } else if (status == "未阅读") { where = where + "mes_Status='0'"; } else if (status == "已回复") { where = where + "mes_Status='2'"; } where = where + " and mes_type ='" + type + "'"; } Session["where"] = where; Message mess = new Message(); //Employee emp = new Employee(); //emp = (Employee)Session["ThisUser"]; string sql = "select top 10 mes_ID,mes_sendPer,mes_title,mes_addTime,mes_type,mes_Status from Message "; sql = sql + " where mes_acceptPer='"+id+"' "+where+" order by mes_addTime desc"; SqlHelper.SqlDbHelper db = new SqlHelper.SqlDbHelper(); string sql2 = "select count(*) from Message "; sql2 = sql2 + "where mes_acceptPer='"+id+"'"; sql2 += where; int countOfpage = int.Parse(db.ExecuteScalar(sql2).ToString()); labCurPage.Text = "1"; labZongShu.Text = countOfpage.ToString(); if (countOfpage % 10 == 0) { labPage.Text = (countOfpage / 10).ToString(); } else labPage.Text = (countOfpage / 10 + 1).ToString(); DataTable dt = new DataTable(); dt = db.ExecuteDataTable(sql); Repeater1.DataSource = newData(dt); Repeater1.DataBind(); } protected void btnback_Click(object sender, ImageClickEventArgs e) { string cur = labCurPage.Text; int num = int.Parse(cur); if (num == 1) { Response.Write(" "); } else { num--; labCurPage.Text = num.ToString(); bind(num); pagecount(); } } /// /// 根据页数不同绑定数据 /// /// 页数
private void bind(int num) { string where; if (Session["where"] == null) { where = ""; } else where = Session["where"].ToString(); SqlHelper.SqlDbHelper db = new SqlHelper.SqlDbHelper(); where = "mes_acceptPer='" + id + "' " + where; string selectColumn = "mes_ID,mes_sendPer,mes_title,mes_addTime,mes_type,mes_Status"; DataTable dt = new DataTable(); dt = db.GetPagedDataTable(selectColumn, "mes_addTime", where, "Message", SqlHelper.OrderBy.DESC, num, 10, null, 0); // dt = db.GetPagedDataTable(selectColumn, "mes_addTime", "Message", SqlHelper.OrderBy.DESC, num, 10, null,0); Repeater1.DataSource = newData(dt); Repeater1.DataBind(); } private void pagecount() { string where; if (Session["where"] == null) { where = ""; } else where = Session["where"].ToString(); SqlHelper.SqlDbHelper db = new SqlHelper.SqlDbHelper(); string sql2 = "select count(*) from Message "; sql2 = sql2 + "where mes_acceptPer='" + id + "'"; sql2 += where; int countOfpage = int.Parse(db.ExecuteScalar(sql2).ToString()); labZongShu.Text = countOfpage.ToString(); if (countOfpage % 10 == 0) { labPage.Text = (countOfpage / 10).ToString(); } else labPage.Text = (countOfpage / 10 + 1).ToString(); } protected void btnnext_Click(object sender, ImageClickEventArgs e) { string cur = labCurPage.Text; string last = labPage.Text; int zongshu = int.Parse(last); int num = int.Parse(cur); if (num == zongshu) { Response.Write(" "); } else { num++; labCurPage.Text = num.ToString(); bind(num); pagecount(); } } protected void btnLast_Click(object sender, ImageClickEventArgs e) { string last = labPage.Text; int zongshu = int.Parse(last); labCurPage.Text = last; bind(zongshu); pagecount(); } protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { string page = tbnum.Text; string cur = labCurPage.Text; string last = labPage.Text; int zongshu = int.Parse(last); int curpage = int.Parse(page); labCurPage.Text = cur; if (curpage > 0 && curpage <= zongshu) { bind(curpage); pagecount(); } else { Response.Write(" "); } } } }
前台代码只贴repeater相关模块
" />
<%# DataBinder.Eval(Container.DataItem, "mes_sendPer")%>
<%# DataBinder.Eval(Container.DataItem, "mes_title")%>
<%# DataBinder.Eval(Container.DataItem, "mes_addTime")%>
<%# DataBinder.Eval(Container.DataItem, "mes_type")%>
" ><%# DataBinder.Eval(Container.DataItem, "mes_Status")%>
Repeater实现高效分页+静态批量删除(消息模块实现全过程)(一)repeater">查看 Repeater实现高效分页+静态批量删除(消息模块实现全过程)(一)repeater">回复 Repeater实现高效分页+静态批量删除(消息模块实现全过程)(一)repeater">删除

Repeater实现高效分页实现完成
由于本人是个新手,贴了很多代码,因为篇幅太长批量静态删除下篇再说,欢迎批评指正。。
Tags:  repeater

延伸阅读

最新评论

发表评论