winform 分页控件分享(二)

大数量分页,使用存储过程。

这个存储过程是网络上考的,呵呵。我把它给贴出来,希望原作者别砸我砖头。。。。。

 




ALTER    PROCEDURE SP_Pagination
/**//*
***************************************************************
** 千万数量级分页存储过程 **
***************************************************************
参数说明:
1.Tables :表名称,视图
2.PrimaryKey :主关键字
3.Sort :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc
4.CurrentPage :当前页码
5.PageSize :分页尺寸
6.Filter :过滤语句,不带Where 
7.Group :Group语句,不带Group By
效果演示:http://www.cn5135.com/_App/Enterprise/QueryResult.aspx
***************************************************************/
(
@Tables varchar(2000),
@PrimaryKey varchar(500),
@Sort varchar(500) = NULL,
@CurrentPage int = 1,
@PageSize int = 10,
@Fields varchar(2000) = '*',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL
)
AS
/**//*默认排序*/
IF @Sort IS NULL OR @Sort = ''
SET @Sort = @PrimaryKey
DECLARE @SortTable varchar(1000)
DECLARE @SortName varchar(1000)
DECLARE @strSortColumn varchar(1000)
DECLARE @operator char(2)
DECLARE @type varchar(1000)
DECLARE @prec int
/**//*设定排序语句.*/
IF CHARINDEX('DESC',@Sort)>0
BEGIN
SET @strSortColumn = REPLACE(@Sort, 'DESC', '')
SET @operator = '<='
END
ELSE
BEGIN
IF CHARINDEX('ASC', @Sort) = 0
SET @strSortColumn = REPLACE(@Sort, 'ASC', '')
SET @operator = '>='
END
IF CHARINDEX('.', @strSortColumn) > 0
BEGIN
SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn))
SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) + 1, LEN(@strSortColumn))
END
ELSE
BEGIN
SET @SortTable = @Tables
SET @SortName = @strSortColumn
END
SELECT @type=t.name, @prec=c.prec
FROM sysobjects o 
JOIN syscolumns c on o.id=c.id
JOIN systypes t on c.xusertype=t.xusertype
WHERE o.name = @SortTable AND c.name = @SortName
IF CHARINDEX('char', @type) > 0
SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
DECLARE @strPageSize varchar(500)
DECLARE @strStartRow varchar(500)
DECLARE @strFilter varchar(1000)
DECLARE @strSimpleFilter varchar(1000)
DECLARE @strGroup varchar(1000)
/**//*默认当前页*/
IF @CurrentPage < 1
SET @CurrentPage = 1
/**//*设置分页参数.*/
SET @strPageSize = CAST(@PageSize AS varchar(500))
SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1) AS varchar(500))
/**//*筛选以及分组语句.*/
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
SET @strFilter = ' WHERE ' + @Filter + ' '
SET @strSimpleFilter = ' AND ' + @Filter + ' '
END
ELSE
BEGIN
SET @strSimpleFilter = ''
SET @strFilter = ''
END
IF @Group IS NOT NULL AND @Group != ''
SET @strGroup = ' GROUP BY ' + @Group + ' '
ELSE
SET @strGroup = ''
/**//*执行查询语句*/
EXEC(
'
DECLARE @SortColumn ' + @type + '
SET ROWCOUNT ' + @strStartRow + '
SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
SET ROWCOUNT ' + @strPageSize + '
SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
'
)


 

使用该存储过陈,得到数据,将数据绑定到数据控件,提供了一个pageData类

    /** <summary>
    /// 数据源提供
    /// </summary>
    public class PageData
     {
        private int _PageSize = 10;
        private int _PageIndex = 1;
        private int _PageCount = 0;
        private int _TotalCount = 0;
        private string _TableName;//表名
        private string _QueryFieldName = "*";//表字段FieldStr
        private string _OrderStr = string.Empty; //排序_SortStr
        private string _QueryCondition = string.Empty;//查询的条件 RowFilter
        private string _PrimaryKey = string.Empty;//主键
        /** <summary>
        /// 显示页数
        /// </summary>
        public int PageSize
         {
            get
             {
                return _PageSize;

            }
            set
             {
                _PageSize = value;
            }
        }
        /** <summary>
        /// 当前页
        /// </summary>
        public int PageIndex
         {
            get
             {
                return _PageIndex;
            }
            set
             {
                _PageIndex = value;
            }
        }
        /** <summary>
        /// 总页数
        /// </summary>
        public int PageCount
         {
            get
             {
                return _PageCount;
            }
        }
        /** <summary>
        /// 总记录数
        /// </summary>
        public int TotalCount
         {
            get
             {
                return _TotalCount;
            }
        }
        /** <summary>
        /// 表名,包括视图
        /// </summary>
        public string TableName
         {
            get
             {
                return _TableName;
            }
            set
             {
                _TableName = value;
            }
        }
        /** <summary>
        /// 表字段FieldStr
        /// </summary>
        public string QueryFieldName
         {
            get
             {
                return _QueryFieldName;
            }
            set
             {
                _QueryFieldName = value;
            }
        }
        /** <summary>
        /// 排序字段
        /// </summary>
        public string OrderStr
         {
            get
             {
                return _OrderStr;
            }
            set
             {
                _OrderStr = value;
            }
        }
        /** <summary>
        /// 查询条件
        /// </summary>
        public string QueryCondition
         {
            get
             {
                return _QueryCondition;
            }
            set
             {
                _QueryCondition = value;
            }
        }
        /** <summary>
        /// 主键
        /// </summary>
        public string PrimaryKey
         {
            get  {
                return _PrimaryKey;
            }
            set  {
                _PrimaryKey = value;
            }
        }
        public DataSet QueryDataTable()
         {
            SqlParameter[] parameters =  {
                    new SqlParameter("@Tables", SqlDbType.VarChar, 255),
                    new SqlParameter("@PrimaryKey" , SqlDbType.VarChar , 255),    
                    new SqlParameter("@Sort", SqlDbType.VarChar , 255 ),
                    new SqlParameter("@CurrentPage", SqlDbType.Int),
                    new SqlParameter("@PageSize", SqlDbType.Int),                                    
                    new SqlParameter("@Fields", SqlDbType.VarChar, 255),
                    new SqlParameter("@Filter", SqlDbType.VarChar,1000),
                    new SqlParameter("@Group" ,SqlDbType.VarChar , 1000 )
                    };
            parameters[0].Value = _TableName;
            parameters[1].Value = _PrimaryKey;
            parameters[2].Value = _OrderStr;
            parameters[3].Value = PageIndex;
            parameters[4].Value = PageSize;
            parameters[5].Value =_QueryFieldName;
            parameters[6].Value = _QueryCondition;
            parameters[7].Value = string.Empty;
            DataSet ds = DbHelperSQL.RunProcedure("SP_Pagination", parameters, "dd");
            _TotalCount = GetTotalCount();
            if (_TotalCount == 0)
             {
                _PageIndex = 0;
                _PageCount = 0;
            }
            else
             {
                _PageCount = _TotalCount % _PageSize == 0 ? _TotalCount / _PageSize : _TotalCount / _PageSize + 1;
                if (_PageIndex > _PageCount)
                 {
                    _PageIndex = _PageCount;

                    parameters[4].Value = _PageSize;

                    ds = QueryDataTable();
                }
            }
            return ds;
        }

        public int GetTotalCount()
         {
            string strSql = " select count(1) from "+_TableName;
            if (_QueryCondition != string.Empty)
             {
                strSql +=" where " + _QueryCondition;
            }
            return int.Parse(DbHelperSQL.GetSingle(strSql).ToString());
        }
    }

 

好了,在页面放个DATAGRIDVIEW 拖入控件pager

 

 

  private void ReceiveOrderJLForm_Load(object sender, EventArgs e)
         {
            this.pager1.PageCurrent = 1;
            this.pager1.Bind();
        }
        private int dgvBind()
         {
            WindowsApp.MyControl.PageData pageData = new WindowsApp.MyControl.PageData();
            pageData.TableName = "T_ReceiveOrder";
            pageData.PrimaryKey = "ReceiveOrderID";
            pageData.OrderStr = "ReceiveOrderID desc";
            pageData.PageIndex = this.pager1.PageCurrent;
            pageData.PageSize = this.pager1.PageSize;
            pageData.QueryCondition = _strSql + strWhere.ToString();
            pageData.QueryFieldName = "*";

            this.pager1.bindingSource.DataSource = pageData.QueryDataTable().Tables[0];
            this.pager1.bindingNavigator.BindingSource = pager1.bindingSource;
            dgvReceiveOrder.AutoGenerateColumns = false;
            dgvReceiveOrder.DataSource = this.pager1.bindingSource;
            return pageData.TotalCount;
        }
        private int pager1_EventPaging(WindowsApp.MyControl.EventPagingArg e)
         {
            return dgvBind();
        }

 

http://files.cnblogs.com/nosnowwolf/Pager.rar 控件下载

转载于:https://www.cnblogs.com/bingoyan/archive/2012/10/23/2735959.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 二进制文件写操作

#include<iostream> using namespace std; #include<fstream>class Person { public:char m_Name[64]; //姓名int m_Age; //年龄};void test01(){//1、包含头文件//2.创建流对象ofstream ofs("person.txt",ios::out | ios::binary);//3、打开文件//ofs.o…

C++ 二进制文件读操作

读二进制文件 二进制方式读文件主要利用流对象调用成员函数read 函数原型:[ istream& read(char *buffer,int len); 参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数 示例: #include <fstream> #include <string> #include<iostream>…

C++ 使用模板Template

template --声明创建模板I typename -- 表面其后面的符号是一种数据类型&#xff0c;可以用class代替 T --- 通用的数据类型&#xff0c;名称可以替换&#xff0c;通常为大写字母 使用模板之前&#xff1a; #include<iostream> using namespace std; #include<strin…

程序员常用字体(vs2008字体修改方案)

字体不仅是设计师手中重要的武器&#xff0c;对我们开发人员来说&#xff0c;字体的选择也有许多讲究&#xff0c;一个好的、适合展示代码的字体&#xff0c;应该具备以下要素&#xff1a; 等宽的字符简洁、清晰并且规范的字符形状支持ASCII码为128以上的扩展字符集与字符同等宽…

三分法解决凸(凹)函数极值问题

二分法只适用与线性函数&#xff0c;当函数脱离线性而呈现凸性或者凹性的时候&#xff0c;三分是很有必要的。 三分过程如下图&#xff1a; 凸函数&#xff1a; 凹函数&#xff1a; 实现方法&#xff1a; double Calc(double p) {/*...*/ }double Solve(double MIN, double MAX…

计算机网络原理(第一章)课后题答案

第一章 1.什么是计算机网络&#xff1f; 计算机网络是互联、自治的计算机集合 自治&#xff1a;计算机系统彼此独立&#xff0c;不存在主从或控制与被控制的关系 互联&#xff1a;利用通信线路链接&#xff0c;连接相互独立的计算机系统 2.网络协议的三要素是什么&#xf…

计算机网络原理(第二章)课后题答案

第二章 1.计算机网络应用可以分为哪几种体系结构的应用类型&#xff1f;各种应用类型的特点是什么&#xff1f; C/S结构&#xff1a;通信旨在客户与服务器之间进行&#xff0c;客户与客户不直接通信 纯P2P结构&#xff1a;没有永远在线的服务器&#xff0c;任意端系统/结点之…

Date和Calendar

此文章来源于廖雪峰博客&#xff1a;Date和Calendar - 廖雪峰的官方网站 在计算机中&#xff0c;应该如何表示日期和时间呢&#xff1f; 我们经常看到的日期和时间表示方式如下&#xff1a; 2019-11-20 0:15:01 GMT00:002019年11月20日8:15:0111/19/2019 19:15:01 America/N…

grandle下载安装图解

1、登录官网&#xff1a;www.gradle.org,进入到下图的界面&#xff1a; 我这里选择了最新版本下载 配置环境变量&#xff0c;这个gradle环境变量是依赖jvm的&#xff0c;需要优先配置jdk&#xff0c;我这里就配置好了 这个GRADLE_USER_HOME相当于maven的本地仓库 配置完成&…

AQS基本原理

什么是AQS&#xff1f; AQS即AbstractQueuedSynchronizer,是一个用于构建锁和同步器的框架。它能降低构建锁和同步器的工作量&#xff0c;还可以避免处理多个位置上发生的竞争问题。在基于AQS构建的同步器中&#xff0c;只可能在一个时刻发生阻塞&#xff0c;从而降低上下文切…

ReentrantReadWriteLock源码分析

概述 ReentrantReadWriteLock维护了一对相关的锁&#xff0c;它们分别是共享readLock和独占writeLock。关于共享读锁和排他写锁的概念其实很好理解。所谓共享读锁就是一个线程读的时候&#xff0c;其它线程也可以来读&#xff08;共享&#xff09;&#xff0c;但是不能来写。排…

WinForm 中 comboBox控件之数据绑定

http://www.cnblogs.com/peterzb/archive/2009/05/30/1491923.html 下面介绍三种对comboBox绑定的方式&#xff0c;分别是泛型中IList和Dictionary&#xff0c;还有数据集DataTable 一、IList 现在我们直接创建一个List集合&#xff0c;然后绑定 View Code IList<string>…

MySQL常用引擎有MyISAM和InnoDB区别

MySQL常用引擎有MyISAM和InnoDB&#xff0c;而InnoDB是mysql默认的引擎。MyISAM不支持行锁&#xff0c;而InnoDB支持行锁和表锁。 如何加锁&#xff1f; MyISAM在执行查询语句&#xff08;SELECT&#xff09;前&#xff0c;会自动给涉及的所有表加读锁&#xff0c;在执行更新…

rocketmq 启动mqbroker.cmd闪退

非常奇怪&#xff0c;broker启动闪退&#xff0c;我就摸索了好久&#xff0c;网上各种百度&#xff0c;最后得到正解 将c盘下这个store下的文件全部删除&#xff0c;就可以启动了 猜测是可能mq非正常关闭&#xff0c;导致&#xff0c;具体懂原理的大佬可以来评论区说说

WPF之布局

此文目的旨在让人快速了解&#xff0c;没有什么深度&#xff0c;如需深入了解布局&#xff0c;请参考msdn。 如果你要把WPF当winform使用&#xff0c;拖拖控件也无不可&#xff0c;不过建议还是不要拖的好。 本文将那些用的比较多的几个布局控件&#xff08;Grid、UniformGrid、…

Springboot @Validated和@Valid的区别 及使用

Valid是使用Hibernate validation的时候使用 Validated是只用Spring Validator校验机制使用 说明&#xff1a;java的JSR303声明了Valid这类接口&#xff0c;而Hibernate-validator对其进行了实现 Validation对Valid进行了二次封装&#xff0c;在使用上并没有区别&#xff0c…

【dp】CF17C. Balance

http://codeforces.com/problemset/problem/17/C 题目中给出一个仅含有a,b,c的字符串&#xff0c;已经两种操作每次选出任意两个相邻的字符&#xff0c;用第一个覆盖掉第二个或者反之&#xff0c;最后询问不考虑操作次数&#xff0c;最终有多少种不同的序列其中a&#xff0c;b,…

ECSHOP设置默认配送方式和默认支付方式

用过ECSHOP的站长都知道&#xff0c;首次登陆ECSHOP进行购物的时候&#xff0c;购物流程中没有“默认配送方式和默认支付方式”这个功能 即使网站上只有一种配送方式&#xff0c;它也不会默认选中这个唯一的配送方式。 当你的网站只有一种配送方式&#xff0c;或者&#xff0c;…

spring如何解决循环依赖

什么是循环依赖&#xff1f; 循环依赖其实是指两个及以上bean相互持有对方&#xff0c;最终形成闭环的过程&#xff08;一般聊循环依赖都是默认的单例bean&#xff09;&#xff0c;简单说就是A依赖B,B依赖C,C又依赖A。 下面我就借用别人的网图来解释下&#xff1a; 注意&#…

利用Frame Animation实现动画效果,代码正确,就是达不到变换效果

就是因为把第一帧图片设置成了ImageView的src资源&#xff0c;从而一直覆盖在变换效果之上&#xff0c;去掉ImageView的src属性即可解决。 要想使应用已载入便播放动画效果&#xff0c;直接将 animationDrawables.start(); 放在activity的各种回调函数中&#xff08;onCreate、…