Asp.net 中通用分页解决办法

原创 2007年09月27日 23:20:00

www.studyez.com网站的开发中,经常涉及到数据的分页.搞得人是不胜其烦.因此就想尽量想把分页相关统一起来.

因此,就把分页的统一了一下.暂时记录一下.

------------------------------------CSer.cs源码-----------------------------

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections.Generic;
/// <summary>
/// Summary description for BaseSplitPage
/// </summary>
public abstract class BaseSplitPage<T, U> : IDisposable where U : List<T>, new()
{
    private SqlConnection _cnn;

    private SqlCommand _cproc;
    private SqlCommand _lproc;

    protected BaseSplitPage(string countProc, string listProc)
    {
        //
        // TODO: Add constructor logic here
        //
        _cnn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[0].ConnectionString);
        _cproc = new SqlCommand(countProc, _cnn);
        _cproc.CommandType = CommandType.StoredProcedure;
        _cproc.Parameters.Add("@strFilter", SqlDbType.NVarChar, 200);
        _lproc = new SqlCommand(listProc, _cnn);
        _lproc.CommandType = CommandType.StoredProcedure;
        _lproc.Parameters.Add("@startRecord", SqlDbType.Int);
        _lproc.Parameters.Add("@maxRecord", SqlDbType.Int);
        _lproc.Parameters.Add("@strFilter", SqlDbType.NVarChar, 200);
        _lproc.Parameters.Add("@strOrder", SqlDbType.NVarChar, 200);

    }
    public int RecordCount(string strFilter)
    {
        int res = 0;
        try
        {
            _cnn.Open();
            _cproc.Parameters[0].Value = strFilter;
            res = (int)_cproc.ExecuteScalar();

        }
        finally
        {
            _cnn.Close();
        }
        return res;

    }
    public U List(int startRecord, int maxRecord, string strFilter, string strOrderExpress)
    {
        U u = new U();
        try
        {
            _cnn.Open();
            _lproc.Parameters[0].Value = startRecord;
            _lproc.Parameters[1].Value = maxRecord;
            _lproc.Parameters[2].Value = strFilter;
            _lproc.Parameters[3].Value = strOrderExpress;
            SqlDataReader dr = _lproc.ExecuteReader(CommandBehavior.CloseConnection);
            if (dr != null)
            {
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        u.Add(CreateFormDB(dr));
                    }
                }
                dr.Close();
            }

        }
        finally
        {
            _cnn.Close();
        }
        return u;
    }

    protected abstract T CreateFormDB(IDataRecord dr);

    #region IDisposable Members
    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (_cnn != null)
                _cnn.Dispose();
            if (_cproc != null)
                _cproc.Dispose();
            if (_lproc != null)
                _lproc.Dispose();
        }
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    #endregion
}
public enum Sex
{
    /// <summary>
    /// 公的
    /// </summary>
    Gong,
    /// <summary>
    /// 母的
    /// </summary>
    Mu,
    /// <summary>
    /// 太监
    /// </summary>
    TaiJian

}
[Serializable]
public class Cser
{
    private int _age;
    private Sex _sex;
    public Cser()
    {
    }
    public Cser(int age, Sex sex)
    {
        _age = age;
        _sex = sex;

    }
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
    public Sex GorM
    {
        get { return _sex; }
        set { _sex = value; }
    }
}
public class CserCollection:List<Cser>
{
}
public class CserSplitPage:BaseSplitPage<Cser ,CserCollection>
{
   public CserSplitPage():base("cs_userCount","cs_userList")
   {
   }


   protected override Cser CreateFormDB(IDataRecord dr)
   {
         int age=(int)dr["Age"];
         Sex sex=(Sex)Enum.Parse(typeof(Sex),(string)dr["Sex"]);
         return new Cser(age,sex );
   }
}

 

public class   UserPage
{
         public void Run()
         {
             using(CserSplitPage sp=new CserSplitPage())
             {
                sp.RecordCount(" Age=10");
             }
         }
}

 

这个东西支持单表还行,多表联合就不怎么好用.看过也用过一些ORM产品,可是老是找不到一个省心省事.

----------------------------------End--------------------------------------

ASP.NET中Repeater控件和DataList控件通用的分页类

本文利用PagedDataSource+Repeater控件实现数字分页, DataList控件也可以通过修改ID名称实现分页。 /// /// Repeater分页 /// /// DataS...

通用分页类 (asp.net C#)

数据分页一直以来是比较头疼的问题,不少的分页控件也随之产生。但是我用过的几个控件,本身都要执行SQL,对存储过程支持不好,为了方便,特别写了个通用分页类,利用PagedDataSource来实现Dat...

VS2015“检测到在集成的托管管道模式下不适用的 ASP.NET 设置”的最终解决办法

 刚把装备升级成Win10和VS2015打开以前的项目一运行发现问题来了,出错, “检测到在集成的托管管道模式下不适用的 ASP.NET 设置。” 可尝试的操作: 1,将配置迁移到 sys...

ASP.net Web API允许跨域访问解决办法

遇到此跨域访问问题,解决办法如下: 1. 在web.config中增加customHeaders,如下图:                                       ...

ASP.Net超时时间已到解决办法-

解决办法 1.在代码里面,把未关闭的连接关闭 2.扩大共享池,方法如下: 解决方法可以是修改连接池的连接生存期,因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间。 具体操作步骤...

【转】asp.net项目在IE11下出现“__doPostBack”未定义的解决办法

最近我们运营的网站有用户反馈在 IE 11 下 点击出现 “__doPostBack”未定义”,经过一番google,终于知道了原因:ASP.NET 可能无法辨识出一些浏览器的最新版本,还会经常把它们...

ASP.NET中引用dll“找不到指定模块"的完美解决办法

最近继续用ASP.Net来重新开发ACM的Online Judge系统,因为要进行进程的监控,所以自己编写了一个非托管的DLL供ASP.Net调用。我用的是VS2005的开发环境,后来发现使用[Dll...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Asp.net 中通用分页解决办法
举报原因:
原因补充:

(最多只允许输入30个字)