• 技术文章 >后端开发 >C#.Net教程

    .NET中怎么实现程序分页

    零下一度零下一度2017-06-24 09:59:48原创990
    aspx

    <asp:TextBox ID="txtKeywords" runat="server" CssClass="keyword" style="width:731%;margin-left:-20em;" placeholder="输入姓名/手机号/身份证号码进行搜索" />

    <asp:LinkButton ID="lbtnSearch" runat="server" CssClass="btn-search" OnClick="lbtnSearch_Click">查询</asp:LinkButton>

    <%#rptList.Items.Count == 0 ? "<tr><td align=\"center\" colspan=\"14\">暂无记录</td></tr>" : ""%>

    <span>显示</span><asp:TextBox ID="txtPageNum" runat="server" CssClass="pagenum" onkeydown="return checkNumber(event);"
    OnTextChanged="txtPageNum_TextChanged" AutoPostBack="True"></asp:TextBox><span>条/页</span>

    <div id="PageContent" runat="server" class="default"></div>

    CodeBehind

    命名空间

    public partial class xxx : Web.UI.ManagePage
    {

    protected int totalCount;//总记录数
    protected int page;//当前页面
    protected int pageSize;//每页数据大小
    protected string keywords = string.Empty;//查询条件

    protected void Page_Load(object sender, EventArgs e)
       {

        this.keywords = Utils..GetQueryString("keywords");//获取查询条件
    this.pageSize = GetPageSize(10); //设置每页数据大小

    if (!Page.IsPostBack)
    {

        RptBind("根据keywords整合的查询语句", "排序字段 asc/desc");

        }

       }

    private void RptBind(string _strWhere, string _orderby)
    {
    this.page = Utils.GetQueryInt("page", 1);
    txtKeywords.Text = this.keywords;
    BLL.Business bll = new BLL.Business();
    this.rptList.DataSource = bll.GetList(this.pageSize, this.page, _strWhere, _orderby, out totalCount,out totalIncome);
    this.rptList.DataBind();
    lblTotalIncome.Text = Math.Round(totalIncome, 3).ToString();
    txtPageNum.Text = this.pageSize.ToString();
    string pageUrl = Utils.CombUrlTxt("xxx.aspx", "keywords={0}&page={1}", this.keywords, "__id__");
    PageContent.InnerHtml = Utils.OutPageList(this.pageSize, this.page, this.totalCount, pageUrl, 8);
    }

    private int GetPageSize(int _default_size)
    {
    int _pagesize;
    if (int.TryParse(Utils.GetCookie("detail_page_size", "NovelPage"), out _pagesize))
    {
    if (_pagesize > 0)
    {
    return _pagesize;
    }
    }
    return _default_size;
    }

    protected void lbtnSearch_Click(object sender, EventArgs e)
    {
    Response.Redirect(Utils.CombUrlTxt("xxx.aspx", "keywords={0}", txtKeywords.Text));
    }

    protected void txtPageNum_TextChanged(object sender, EventArgs e)
    {
    int _pagesize;
    if (int.TryParse(txtPageNum.Text.Trim(), out _pagesize))
    {
    if (_pagesize > 0)
    {
    Utils.WriteCookie("detail_page_size", "NovelPage", _pagesize.ToString(), 14400);
    }
    }
    Response.Redirect(Utils.CombUrlTxt("xxx.aspx", "keywords={0}", this.keywords));
    }

    }

    Utils

    命名空间

    public class Utils
    {

    public static string GetQueryString(string strName)
    {
    return GetQueryString(strName, false);
    }

    public static string GetQueryString(string strName, bool sqlSafeCheck)
    {
    if (HttpContext.Current.Request.QueryString[strName] == null)
    return "";

    if (sqlSafeCheck && !IsSafeSqlString(HttpContext.Current.Request.QueryString[strName]))
    return "unsafe string";

    return HttpContext.Current.Request.QueryString[strName];
    }

    public static bool IsSafeSqlString(string str)
    {
    return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
    }

    public static int GetQueryInt(string strName, int defValue)
    {
    return StrToInt(HttpContext.Current.Request.QueryString[strName], defValue);
    }

    public static int StrToInt(string expression, int defValue)
    {
    if (string.IsNullOrEmpty(expression) || expression.Trim().Length >= 11 || !Regex.IsMatch(expression.Trim(), @"^([-]|[0-9])[0-9]*(\.\w*)?$"))
    return defValue;

    int rv;
    if (Int32.TryParse(expression, out rv))
    return rv;

    return Convert.ToInt32(StrToFloat(expression, defValue));
    }

    public static float StrToFloat(string expression, float defValue)
    {
    if ((expression == null) || (expression.Length > 10))
    return defValue;

    float intValue = defValue;
    if (expression != null)
    {
    bool IsFloat = Regex.IsMatch(expression, @"^([-]|[0-9])[0-9]*(\.\w*)?$");
    if (IsFloat)
    float.TryParse(expression, out intValue);
    }
    return intValue;
    }

    public static string CombUrlTxt(string _url, string _keys, params string[] _values)
    {
    StringBuilder urlParams = new StringBuilder();
    try
    {
    string[] keyArr = _keys.Split(new char[] { '&' });
    for (int i = 0; i < keyArr.Length; i++)
    {
    if (!string.IsNullOrEmpty(_values[i]) && _values[i] != "0")
    {
    _values[i] = UrlEncode(_values[i]);
    urlParams.Append(string.Format(keyArr[i], _values) + "&");
    }
    }
    if (!string.IsNullOrEmpty(urlParams.ToString()) && _url.IndexOf("?") == -1)
    urlParams.Insert(0, "?");
    }
    catch
    {
    return _url;
    }
    return _url + DelLastChar(urlParams.ToString(), "&");
    }

    public static string UrlEncode(string str)
    {
    if (string.IsNullOrEmpty(str))
    {
    return "";
    }
    str = str.Replace("'", "");
    return HttpContext.Current.Server.UrlEncode(str);
    }

    //删除最后结尾的指定字符后的字符

    public static string DelLastChar(string str, string strchar)
    {
    if (string.IsNullOrEmpty(str))
    return "";
    if (str.LastIndexOf(strchar) >= 0 && str.LastIndexOf(strchar) == str.Length - 1)
    {
    return str.Substring(0, str.LastIndexOf(strchar));
    }
    return str;
    }

    //返回分页页码

    public static string OutPageList(int pageSize, int pageIndex, int totalCount, string linkUrl, int centSize)
    {
    //计算页数
    if (totalCount < 1 || pageSize < 1)
    {
    return "";
    }
    int pageCount = totalCount / pageSize;
    if (pageCount < 1)
    {
    return "";
    }
    if (totalCount % pageSize > 0)
    {
    pageCount += 1;
    }
    if (pageCount <= 1)
    {
    return "";
    }
    StringBuilder pageStr = new StringBuilder();
    string pageId = "__id__";
    string firstBtn = "<a href=\"" + ReplaceStr(linkUrl, pageId, (pageIndex-1).ToString()) + "\">上一页»</a>";
    string lastBtn = "<a href=\"" + ReplaceStr(linkUrl, pageId, (pageIndex + 1).ToString()) + "\">下一页»</a>";
    string firstStr = "<a href=\"" + ReplaceStr(linkUrl, pageId, "1") + "\">1</a>";
    string lastStr = "<a href=\"" + ReplaceStr(linkUrl, pageId, pageCount.ToString()) + "\">" + pageCount.ToString() + "</a>";

    if (pageIndex <= 1)
    {
    firstBtn = "<span class=\"disabled\">«上一页</span>";
    }
    if (pageIndex >= pageCount)
    {
    lastBtn = "<span class=\"disabled\">下一页»</span>";
    }
    if (pageIndex == 1)
    {
    firstStr = "<span class=\"current\">1</span>";
    }
    if (pageIndex == pageCount)
    {
    lastStr = "<span class=\"current\">" + pageCount.ToString() + "</span>";
    }
    int firstNum = pageIndex - (centSize / 2); //中间开始的页码
    if (pageIndex < centSize)
    firstNum = 2;
    int lastNum = pageIndex + centSize - ((centSize / 2) + 1); //中间结束的页码
    if (lastNum >= pageCount)
    lastNum = pageCount - 1;
    pageStr.Append("<span>共" + totalCount + "记录</span>");
    pageStr.Append(firstBtn + firstStr);
    if (pageIndex >= centSize)
    {
    pageStr.Append("<span>...</span>\n");
    }
    for (int i = firstNum; i <= lastNum; i++)
    {
    if (i == pageIndex)
    {
    pageStr.Append("<span class=\"current\">" + i + "</span>");
    }
    else
    {
    pageStr.Append("<a href=\"" + ReplaceStr(linkUrl, pageId, i.ToString()) + "\">" + i + "</a>");
    }
    }
    if (pageCount - pageIndex > centSize - ((centSize / 2)))
    {
    pageStr.Append("<span>...</span>");
    }
    pageStr.Append(lastStr + lastBtn);
    return pageStr.ToString();
    }

    public static string ReplaceStr(string originalStr, string oldStr, string newStr)
    {
    if (string.IsNullOrEmpty(oldStr))
    {
    return "";
    }
    return originalStr.Replace(oldStr, newStr);
    }

    public static string GetCookie(string strName, string key)
    {
    if (HttpContext.Current.Request.Cookies != null && HttpContext.Current.Request.Cookies[strName] != null && HttpContext.Current.Request.Cookies[strName][key] != null)
    return UrlDecode(HttpContext.Current.Request.Cookies[strName][key].ToString());

    return "";
    }

    public static string UrlDecode(string str)
    {
    if (string.IsNullOrEmpty(str))
    {
    return "";
    }
    return HttpContext.Current.Server.UrlDecode(str);
    }

    public static void WriteCookie(string strName, string key, string strValue, int expires)
    {
    HttpCookie cookie = HttpContext.Current.Request.Cookies[strName];
    if (cookie == null)
    {
    cookie = new HttpCookie(strName);
    }
    cookie[key] = UrlEncode(strValue);
    cookie.Expires = DateTime.Now.AddMinutes(expires);
    HttpContext.Current.Response.AppendCookie(cookie);
    }

    }

    Bussiness

    命名空间

    public class Business
    {
    private readonly DAL.xxx xxxDal;

    public Business()
    {
    xxxDal = new DAL.xxx();

      }

    public List<Model.xxx> GetList(int pageSize, int pageIndex, string strWhere, string filedOrder, out int recordCount,out decimal totalIncome)
    {
    return xxxDal.GetList(pageSize, pageIndex, strWhere, filedOrder, out recordCount,out totalIncome);
    }

    }

    DAL

    命名空间

    public partial class xxx
    {

    public List<Model.xxx> GetList(int pageSize, int pageIndex, string strWhere, string filedOrder, out int recordCount,out decimal totalIncome)
    {
    totalIncome = 0;
    StringBuilder strSql = new StringBuilder();
    strSql.Append(@"select a.oid,ocreatetime,a.oaccname,a.oacctel,(select ucardnum from AppUser where uid=a.ouid) as ucardnum,c.pname,
    otype,ISNULL(b.corealmoney,0) as corealmoney,ISNULL(b.cooid,0) as cooid,
    omoney,ISNULL(coprate,0) coprate,ISNULL(codrawfee,0) codrawfee,ISNULL(codowndrawfee,0) codowndrawfee,ISNULL(d.uname,'无') as uname,
    ISNULL(b.couserrate,0) as couserrate,
    ROW_NUMBER() over(order by ocreatetime desc) r from xxx a left join
    (select cooid,coprate,comoney,corealmoney,codowndrawfee,codrawfee,couupperid,couserrate from xxx where costatus=1)b
    on a.oid=b.cooid join xxx c on a.opid=c.pid
    left join xxx d on b.couupperid=d.[uid] where a.ostatus=1 ");
    if (strWhere.Trim() != "")
    {
    strSql.Append(strWhere);
    }
    using (var context = DataBaseConnection.GetSdkBaseConnection())
    {
    recordCount = context.ExecuteScalar<int>(PagingHelper.CreateCountingSql(strSql.ToString()));
    if (recordCount > 0)
    {
    StringBuilder strSql2 = new StringBuilder();
    strSql2.Append(@"select SUM(corealmoney) from xxx a left join
    (select cooid,coprate,corealmoney,codowndrawfee,comoney,codrawfee,couupperid,couserrate from xxx where costatus=1)b
    on a.oid=b.cooid join xxx c on a.opid=c.pid
    left join xxx d on b.couupperid=d.[uid] where a.ostatus=1 ");
    if (strWhere.Trim() != "")
    {
    strSql2.Append(strWhere);
    }
    }
    return context.Query<Model.xxx>(PagingHelper.CreatePagingSql(recordCount, pageSize, pageIndex, strSql.ToString(), filedOrder)).ToList();
    }
    }

    }

    PagingHelper

    命名空间

    // ROW_NUMBER高效率分页(仅支持MSSQL2005及以上)

    public static class PagingHelper
    {

    // 获取分页SQL语句,默认row_number为关健字,所有表不允许使用该字段名

    public static string CreatePagingSql(int _recordCount, int _pageSize, int _pageIndex, string _safeSql, string _orderField)
    {
    //计算总页数
    _pageSize = _pageSize == 0 ? _recordCount : _pageSize;
    int pageCount = (_recordCount + _pageSize - 1) / _pageSize;

    //检查当前页数
    if (_pageIndex < 1)
    {
    _pageIndex = 1;
    }
    else if (_pageIndex > pageCount)
    {
    _pageIndex = pageCount;
    }
    //拼接SQL字符串,加上ROW_NUMBER函数进行分页
    StringBuilder newSafeSql = new StringBuilder();
    newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as row_number,", _orderField);
    newSafeSql.Append(_safeSql.Substring(_safeSql.ToUpper().IndexOf("SELECT") + 6));

    //拼接成最终的SQL语句
    StringBuilder sbSql = new StringBuilder();
    sbSql.Append("SELECT * FROM (");
    sbSql.Append(newSafeSql.ToString());
    sbSql.Append(") AS T");
    sbSql.AppendFormat(" WHERE row_number between {0} and {1}", ((_pageIndex - 1) * _pageSize) + 1, _pageIndex * _pageSize);

    return sbSql.ToString();
    }
    // 获取记录总数SQL语句
    public static string CreateCountingSql(string _safeSql)
    {
    return string.Format(" SELECT COUNT(1) AS RecordCount FROM ({0}) AS T ", _safeSql);
    }

    }

    以上就是.NET中怎么实现程序分页的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:H5结合百度map实现GPS定位的实例教程 下一篇:把exe注册为windows服务实例教程
    PHP编程就业班

    相关文章推荐

    • 分享一道逻辑面试题,看看你能答对吗!• c语言中形参的缺省存储类别是什么• C++设计模式浅识装饰模式• SUNWEN教程之----C#进阶(五)• asp.net 图片验证码的HtmlHelper

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网