| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2450 人关注过本帖
标题:三层结构中怎样使用AspNetPager控件并结合分页存储过程使用
只看楼主 加入收藏
airfei
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-4-12
收藏
 问题点数:0 回复次数:3 
三层结构中怎样使用AspNetPager控件并结合分页存储过程使用
是这样的我在三层结构中做开发,想对GridView分页,于是我选择了AspNetPager控件7.0.2,但是我的数据库是SQL 2000,不像SQL 2005中有ROW_NUMBER()函数,只好使用存储过程。
在网上找到个通用的存储过程
[code=SQL]
------------------------------------
--用途:分页存储过程(对有主键的表效率极高)     
--说明:
------------------------------------

CREATE   PROCEDURE   UP_GetRecordByPage
        @tblName             varchar(255),               --   表名
        @fldName             varchar(255),               --   主键字段名
        @PageSize           int   =   10,                       --   页尺寸
        @PageIndex         int   =   1,                         --   页码
        @IsReCount         bit   =   0,                         --   返回记录总数,      0   值则返回
        @OrderType         bit   =   0,                         --   设置排序类型,      0   值则降序
        @strWhere           varchar(1000)   =   ' '     --   查询条件   (注意:   不要加   where)
AS

declare   @strSQL       varchar(6000)               --   主语句
declare   @strTmp       varchar(100)                 --   临时变量
declare   @strOrder   varchar(400)                 --   排序类型

if   @OrderType   !=   0
begin
        set   @strTmp   =   ' <(select   min '
        set   @strOrder   =   '   order   by   [ '   +   @fldName   + ']   desc '
end
else
begin
        set   @strTmp   =   '> (select   max '
        set   @strOrder   =   '   order   by   [ '   +   @fldName   + ']   asc '
end

set   @strSQL   =   'select   top   '   +   str(@PageSize)   +   '   *   from   [ '
        +   @tblName   +   ']   where   [ '   +   @fldName   +   '] '   +   @strTmp   +   '([ '
        +   @fldName   +   '])   from   (select   top   '   +   str((@PageIndex-1)*@PageSize)   +   '   [ '
        +   @fldName   +   ']   from   [ '   +   @tblName   +   '] '   +   @strOrder   +   ')   as   tblTmp) '
        +   @strOrder

if   @strWhere   !=   ' '
        set   @strSQL   =   'select   top   '   +   str(@PageSize)   +   '   *   from   [ '
                +   @tblName   +   ']   where   [ '   +   @fldName   +   '] '   +   @strTmp   +   '([ '
                +   @fldName   +   '])   from   (select   top   '   +   str((@PageIndex-1)*@PageSize)   +   '   [ '
                +   @fldName   +   ']   from   [ '   +   @tblName   +   ']   where   '   +   @strWhere   +   '   '
                +   @strOrder   +   ')   as   tblTmp)   and   '   +   @strWhere   +   '   '   +   @strOrder

if   @PageIndex   =   1
begin
        set   @strTmp   = ' '
        if   @strWhere   !=   ' '
                set   @strTmp   =   '   where   '   +   @strWhere

        set   @strSQL   =   'select   top   '   +   str(@PageSize)   +   '   *   from   [ '
                +   @tblName   +   '] '   +   @strTmp   +   '   '   +   @strOrder
end

if   @IsReCount   !=   0
        set   @strSQL   =   'select   count(*)   as   Total   from   [ '   +   @tblName   +   '] '+ '   where   '   +   @strWhere

exec   (@strSQL)
GO
[/code]

然后我在三层中调用
[code=C#]
BLL层
public DataSet GetList(int PageSize, int PageIndex, string strWhere)
{
   return dal.GetList(PageSize, PageIndex, strWhere);
}

IDAL层
DataSet GetList(int PageSize,int PageIndex,string strWhere);

DAL层
///<summary>
        ///分页获取数据列表
        ///</summary>
        public DataSet GetList(int PageSize,int PageIndex,string strWhere)
        {
            SqlParameter[] parameters = {
                    new SqlParameter("@tblName", SqlDbType.VarChar, 255),
                    new SqlParameter("@fldName", SqlDbType.VarChar, 255),
                    new SqlParameter("@PageSize", SqlDbType.Int),
                    new SqlParameter("@PageIndex", SqlDbType.Int),
                    new SqlParameter("@IsReCount", SqlDbType.Bit),
                    new SqlParameter("@OrderType", SqlDbType.Bit),
                    new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
                    };
            parameters[0].Value = "Li_Admin";
            parameters[1].Value = "adminID";
            parameters[2].Value = PageSize;
            parameters[3].Value = PageIndex;
            parameters[4].Value = 0;
            parameters[5].Value = 0;
            parameters[6].Value = strWhere;    
            return DbHelperSQL.RunProcedure("UP_GetRecordByPage",parameters,"ds");
        }

DbHelperSQL中函数
public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet dataSet = new DataSet();
                connection.Open();
                SqlDataAdapter sqlDA = new SqlDataAdapter();
                sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                sqlDA.Fill(dataSet, tableName);
                connection.Close();
                return dataSet;
            }
        }

private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
        {
            SqlCommand command = new SqlCommand(storedProcName, connection);
             = CommandType.StoredProcedure;
            foreach (SqlParameter parameter in parameters)
            {
                if (parameter != null)
                {
                    // 检查未分配值的输出参数,将其分配以DBNull.Value.
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    command.Parameters.Add(parameter);
                }
            }

            return command;
        }

web层调用
public void BindData(string strWhere)
        {
            string StrWhere = null;
            ViewState["vsKey"] = null;
            if (strWhere != "")
            {
                ViewState["vsKey"] = strWhere;
                StrWhere = strWhere;
            }
            Li.BLL.Li_Admin admin_bll = new Li.BLL.Li_Admin();
            AspNetPager1.RecordCount = admin_bll.GetCount(strWhere);
            DataSet ds = admin_bll.GetList(AspNetPager1.PageSize,AspNetPager1.CurrentPageIndex - 1, StrWhere);
            this.GridView1.DataSource = ds;    //这里报错,内容为IListSource 不包含任何数据源。
            this.GridView1.DataBind();
        }
[/code]

请大家帮帮忙,告诉我是什么问题,谢谢大家。
搜索更多相关主题的帖子: AspNetPager 控件 结构 结合 
2008-10-03 16:20
Xxibug
Rank: 1
等 级:新手上路
威 望:1
帖 子:95
专家分:0
注 册:2006-1-31
收藏
得分:0 
在DataSet中指明绑定表试试

=======【天上有人 地上有狼】=======
2008-10-04 00:19
zsf2006
Rank: 1
来 自:博客园
等 级:新手上路
威 望:1
帖 子:315
专家分:0
注 册:2006-6-3
收藏
得分:0 
打断点 跟踪 调试 看看

光临我的博客:http://
2008-10-04 21:31
seaven
Rank: 1
等 级:新手上路
威 望:1
帖 子:6
专家分:0
注 册:2008-9-7
收藏
得分:0 
没这么麻烦啊,其实你给的开始页数和结束页数,就是where里面的条件,和普通的查询一样的啊。
2008-10-07 12:50
快速回复:三层结构中怎样使用AspNetPager控件并结合分页存储过程使用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029861 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved