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

时间:2023-06-30 04:02:32 

基本函数如下:


/// <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;的形式,在老汤的提醒下,做了修改,也解决了一直困扰我的问题。

标签:asp.net,aspnetpager,分页
0
投稿

猜你喜欢

  • python人工智能使用RepVgg实现图像分类示例详解

    2021-04-15 21:36:42
  • 用ADODB.Stream代替FSO读取/写入文本文件

    2008-01-31 12:19:00
  • 在DOS界面如何运行python的py文件

    2022-05-01 16:39:33
  • Python入门教程(三十一)Python的Try和Except

    2022-02-26 01:21:14
  • vue上传图片组件编写代码

    2024-05-10 14:14:33
  • python读取几个G的csv文件方法

    2023-06-04 08:01:27
  • Python 实现局域网远程屏幕截图案例

    2021-05-13 13:43:43
  • 创建IE各版本专属CSS方法

    2007-09-27 12:16:00
  • 小 200 行 Python 代码制作一个换脸程序

    2021-02-12 09:47:52
  • 详解laravel安装使用Passport(Api认证)

    2023-11-19 02:08:54
  • python+flask编写一个简单的登录接口

    2021-06-09 21:19:02
  • wxpython中Textctrl回车事件无效的解决方法

    2021-10-16 23:00:07
  • Python中每次处理一个字符的5种方法

    2023-09-26 02:49:13
  • Django 添加静态文件的两种实现方法(必看篇)

    2021-09-03 23:53:58
  • Python制作旋转花灯祝大家元宵节快乐(实例代码)

    2023-10-24 02:49:18
  • python3 通过 pybind11 使用Eigen加速代码的步骤详解

    2023-05-13 21:53:18
  • 彻底解决Python包下载慢问题

    2021-07-17 16:02:27
  • 解决Jupyter因卸载重装导致的问题修复

    2023-09-30 18:22:31
  • python检查字符串是否是正确ISBN的方法

    2022-05-10 14:54:01
  • 几个比较重要的MySQL变量

    2024-01-23 20:22:36
  • asp之家 网络编程 m.aspxhome.com