当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net aspnetpager分页统计时与实际不符的解决办法

ASP.NET
在C#中导入WebBrowser控件,生成具有强名称的程序集
Asp.Net中的脚本回调和Server.Transfer页面传值
暂时性的解决datagrid控件数据绑定时候xxx字段不属于xxx表的错误
http://www.donews.net/yangwl/archive/2004/10/17/136872.aspx
Some tips for using visual studio .net
Grasshopper简介(节选)
ORACLE 常用的SQL语法和数据对象
[DNN学习所得]让IE也能实现解压缩功能(提供演示源码下载)
学习笔记之Microsoft Windows服务
关于XML:以对象模型为中心
P&P Enterprise Library Extensions
简易的字符替换,可以用于用户自我介绍输入框,简单新闻回复& etc.
缩略图多路径多格式保存
"关机/休眠/重启/注销"的类
[DNN功能]自己动手做语言包
处理WinForm多线程程序时的陷阱
获得光标在多行textbox中的行与列的函数
ADO.NET 和 ADO 的比较
vb.net类的封装,继承,多态,抽象之一
Display XML in AxSHDocVw.AxWebBrowser

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 167 ::
收藏到网摘: n/a

最近分页方面根据实际需要修改了一些函数 基本函数如下:
复制代码 代码如下:

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