广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    asp.net aspnetpager分页统计时与实际不符的解决办法

    2018-05-08 11:29:13 次阅读 稿源:互联网
    广告
    基本函数如下:
    代码如下:

    /// <summary>
    /// 需要分页时使用,根据参数和ConditionExpress获取DataTable
    /// </summary>
    /// <param name="_tableName">表名</param>
    /// <param name="_fieldNames">字段名集合,用逗号分开</param>
    /// <param name="_OrderColumn">排序字段,用于统计有多少条记录</param>
    /// <param name="IsDesc">是否倒序</param>
    /// <param name="_indexColumn">自增字段名</param>
    /// <param name="_currentPage">当前页</param>
    /// <param name="pageSize">页大小</param>
    /// <param name="_rowsCount">总记录数</param>
    /// <returns>获取到的DataTable</returns>
    public static DataTable GetDataTable(string _tableName, string _fieldNames, string _OrderColumn, bool IsDesc, string _indexColumn, int _currentPage, int pageSize, string conditionExpress, ref int _rowsCount)
    {
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
    string whereStr = " where 1=1 ";
    string sort = IsDesc ? " desc" : " asc";

    string sqlStr = " from " + _tableName;
    //排序字段
    string orderStr = " order by " + _OrderColumn + sort;
    if (_OrderColumn != _indexColumn)
    orderStr += "," + _indexColumn + sort;
    if (conditionExpress != string.Empty)
    {
    whereStr += conditionExpress;
    }
    sqlStr += whereStr;

    //取得符合条件的数据总数
    SqlCommand cmd = new SqlCommand("select count(" + _OrderColumn + ") " + sqlStr, conn);
    conn.Open();
    try
    {
    _rowsCount = (int)cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
    throw new Exception(ex.Message);
    }

    if (_currentPage > _rowsCount) _currentPage = _rowsCount;

    if (_currentPage > 1)
    {
    if (IsDesc)
    sqlStr += " and " + _OrderColumn + " < (select MIN(" + _OrderColumn + ") from ";
    else
    sqlStr += " and " + _OrderColumn + " > (select MAX(" + _OrderColumn + ") from ";
    sqlStr += "(select top " + (pageSize * (_currentPage - 1)) + " " + _OrderColumn + " from " + _tableName + whereStr + orderStr + ") as t)";
    }
    sqlStr = "select top " + pageSize + " " + _fieldNames + sqlStr + orderStr;

    try
    {
    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(sqlStr, conn);
    da.Fill(ds);
    return ds.Tables[0];
    }
    catch (Exception EX)
    {
    throw new Exception(EX.Message);
    }
    }
    }

    调用如下:
    代码如下:

    private void bind()
    {
    int rowCount = 1;
    string wherestr = string.Empty;
    //设置分页
    anPager.AlwaysShow = true;
    anPager.PageSize = 10;
    this.rptdictionary.DataSource = GetDataTable(
    "dictionary_Toysgogo_",
    "[id_dictionary_],[namecn_dictionary_],[nameen_dictionary_],[point_dictionary_]",
    "[id_dictionary_]",
    true,
    "[id_dictionary_]",
    this.anPager.CurrentPageIndex,
    anPager.PageSize,
    wherestr,
    ref rowCount
    );
    this.anPager.RecordCount = rowCount;
    this.rptdictionary.DataBind();
    }

    代码如下:

    //分页切换
    protected void anPager_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
    {
    this.anPager.CurrentPageIndex = e.NewPageIndex;
    this.tbxType.Text = this.tbxType.Text;
    bind();
    }

    之前一直在页数方面直接用数字写进去,没有写成anPager.PageSize=10;的形式,在老汤的提醒下,做了修改,也解决了一直困扰我的问题。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告