位置: 编程技术 - 正文

GridView自定义分页的四种存储过程(gridview自定义排序)

编辑:rootadmin
1. 为什么不使用GridView的默认分页功能 首先要说说为什么不用GridView的默认的分页功能,GridView控件并非真正知道如何获得一个新页面,它只是请求绑定的数据源控件返回适合规定页面的行,分页最终是由数据源控件完成。当我们使用SqlDataSource或使用以上的代码处理分页时。每次这个页面被请求或者回发时,所有和这个SELECT语句匹配的记录都被读取并存储到一个内部的DataSet中,但只显示适合当前页面大小的记录数。也就是说有可能使用Select语句返回条记录,而每次回发只显示条记录。如果启用了SqlDataSource上的缓存,通过把EnableCaching设置为true,则情况会更好一些。在这种情况下,我们只须访问一次数据库服务器,整个数据集只加载一次,并在指定的期限内存储在ASP.NET缓存中。只要数据保持缓存状态,显示任何页面将无须再次访问数据库服务器。然而,可能有大量数据存储在内存中,换而言之,Web服务器的压力大大的增加了。因此,如果要使用SqlDataSource来获取较小的数据时,GridView内建的自动分页可能足够高效了,但对于大数据量来说是不合适的。 2. 分页的四种存储过程(分页+排序的版本请参考Blog里其他文章) 在大多数情况下我们使用存储过程来进行分页,今天有空总结了一下使用存储过程对GridView进行分页的4种写法(分别是使用Top关键字,临时表,临时表变量和SQL Server 新加的Row_Number()函数) 后续的文章中还将涉及GridView控件使用ObjectDataSource自定义分页 + 排序,Repeater控件自定义分页 + 排序,有兴趣的朋友可以参考。 3. 在GridView中的应用 [/code] using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class GridViewPaging : System.Web.UI.Page { //每页显示的最多记录的条数 private int pageSize = ; //当前页号 private int currentPageNumber; //显示数据的总条数 private static int rowCount; //总页数 private static int pageCount; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = new SqlCommand("GetProductsCount", cn); cmd.CommandType = CommandType.StoredProcedure; cn.Open(); rowCount = (int)cmd.ExecuteScalar(); cn.Close(); pageCount = (rowCount - 1) / pageSize + 1; currentPageNumber = 1; ViewState["currentPageNumber"] = currentPageNumber; lbtnPrevious.Enabled = false; lbtnFirst.Enabled = false; for (int i = 1; i <= pageCount; i++) { dropPage.Items.Add(new ListItem(i.ToString(), i.ToString())); } dropPage.SelectedValue = dropPage.Items.FindByValue(currentPageNumber.ToString()).Value; SqlDataSource1.Select(DataSourceSelectArguments.Empty); } } protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { SqlDataSource1.SelectParameters["PageNumber"].DefaultValue = currentPageNumber.ToString(); SqlDataSource1.SelectParameters["PageSize"].DefaultValue = pageSize.ToString(); } protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e) { lblMessage.Text = "共找到" + rowCount + "条记录, 当前第" + currentPageNumber + "/" + pageCount + "页"; } protected void lbtnPage_Command(object sender, CommandEventArgs e) { switch (e.CommandName) { case "First": currentPageNumber = 1; break; case "Previous": currentPageNumber = (int)ViewState["currentPageNumber"] - 1 > 1 ? (int)ViewState["currentPageNumber"] - 1 : 1; break; case "Next": currentPageNumber = (int)ViewState["currentPageNumber"] + 1 < pageCount ? (int)ViewState["currentPageNumber"] + 1 : pageCount; break; case "Last": currentPageNumber = pageCount; break; } dropPage.SelectedValue = dropPage.Items.FindByValue(currentPageNumber.ToString()).Value; ViewState["currentPageNumber"] = currentPageNumber; SetButton(currentPageNumber); SqlDataSource1.Select(DataSourceSelectArguments.Empty); } private void SetButton(int currentPageNumber) { lbtnFirst.Enabled = currentPageNumber != 1; lbtnPrevious.Enabled = currentPageNumber != 1; lbtnNext.Enabled = currentPageNumber != pageCount; lbtnLast.Enabled = currentPageNumber != pageCount; } protected void dropPage_SelectedIndexChanged(object sender, EventArgs e) { currentPageNumber = int.Parse(dropPage.SelectedValue); ViewState["currentPageNumber"] = currentPageNumber; SetButton(currentPageNumber); SqlDataSource1.Select(DataSourceSelectArguments.Empty); } } [/code] 4.分页效果图:

推荐整理分享GridView自定义分页的四种存储过程(gridview自定义排序),希望有所帮助,仅作参考,欢迎阅读内容。

GridView自定义分页的四种存储过程(gridview自定义排序)

文章相关热门搜索词:gridview分页的实现,gridview控件实现分页,如何设置gridview的风格样式,gridviewcolumn,gridview编辑指定列,gridviewcolumn,如何设置gridview的风格样式,gridview控件实现分页,内容如对您有帮助,希望把文章链接给更多的朋友!

Godaddy 导入导出MSSQL数据库的实现步骤 如何导入数据库可以从限制文件中导入SQL共享服务器数据库。如果想把存放在其他地方的数据导入,需要先把其内容拷到限制文件中。(注:在导入数

得到自增列的下一个会插入的id declare@Table_namevarchar()set@Table_name='Pay_inputpay';Selectso.nameTable_name,--表名字sc.nameIden_Column_name,--自增字段名字ident_current(so.name)curr_value,--自增字段当前值ident_

几个简单的基本的sql语句 说明:几个简单的基本的sql语句选择:select*fromtable1where范围插入:insertintotable1(field1,field2)values(value1,value2)删除:deletefromtable1where范围更新:updatetable1set

标签: gridview自定义排序

本文链接地址:https://www.jiuchutong.com/biancheng/349794.html 转载请保留说明!

上一篇:MSSQL 数据库备份和还原的几种方法 图文教程(数据库备份sqlserver)

下一篇:几个简单的基本的sql语句(简单基是什么)

  • Laravel最佳分割路由文件(routes.php)的方式(laravel分页)

    Laravel最佳分割路由文件(routes.php)的方式(laravel分页)

  • 浅析SQL Server的分页方式 ISNULL与COALESCE性能比较(sql server干嘛的)

    我们看到上述COALESCE合并的结果是可空的而ISNULL不是,有一点点不同。

    (3)COALESCE对列计算时需要持久化

    接下来我们看看二者最大的不同,我们通过计算列并且在其上面创建主键或者非空约束,看看ISNULL和COALESCE的区别

    我们再来看看COALESCE函数来计算列

    很明显我们需要对列进行持久化,通过添加PERSISTED关键字,如下即可。

    我们再来看看一个二者的不同

    我们到这里其实我们可以稍微概括下二者的区别:ISNULL着重于替换,而COALESCE着重于合并。COALESCE显示忽略了NULL并用空字符串填充并压缩,而ISNULL对NULL会用空字符串填充但不会压缩。

    (4)COALESCE函数支持超过两个参数

    对于多个参数输入,ISNULL函数需要嵌套调用,而COALESCE能够处理任何数量,至于上限不知,所以对于多个参数使用COALESCE更加,如下使用多个参数输入。

    SELECT COALESCE(a, b, c, d, e, f, g) FROM dbo.table;

    而对于ISNULL,我们需要这样做

    SELECT ISNULL(a, ISNULL(b, ISNULL(c, ISNULL(d, ISNULL(e, ISNULL(f, g)))))) FROM dbo.table;

    二者最终执行时和利用CASE一样

    (5)COALESCE和ISNULL二者性能比较

    我们来运行如下查询

    我们有查询四个场景:(1)两个参数都为NULL(2)第一个参数为NULL(3)第二个参数为NULL(4)两个参数都为NULL。每个场景测试十次,最终得出如下结果

    从上看出二者性能并未有什么太大差异,我们不需要太担心了吧,当然上述场景并未完全覆盖,至少还是能说明一部分。上述我们得到的结果查看的执行时间,现在我们再来看看二者查询执行计划。

    上述可能不太准确,还和硬件配置有关,也有可能COALESCE的性能差与ISNULL。二者性能应该是没什么很大差异。

    (6)ISNULL和自然语言描述不一致

    为何是和自然语言描述不一致呢?也就是说我们当判断某个值为NULL会做什么,不为NULL再做什么,这时用查询语言SQL描述如下:

    我们用自然语言角度来看,翻译为如果something为NULL我们做什么,这个时候是不一致的。因为在SQL Server中没有布尔值类型,上述我们只能进行如下转换

    (7)利用GUID看看奇葩的ISNULL

    在本节介绍之前我们再来看看一个例子,从而颠覆你的想法,让你发狂。

    SELECT ISNULL(NEWID(), 'JeffckyWang" class="img-responsive" alt="浅析SQL Server的分页方式 ISNULL与COALESCE性能比较(sql server干嘛的)">

    浅析SQL Server的分页方式 ISNULL与COALESCE性能比较(sql server干嘛的)

  • Mysql优化调优中两个重要参数table_cache和key_buffer(mysql数据库优化及sql调优)

    Mysql优化调优中两个重要参数table_cache和key_buffer(mysql数据库优化及sql调优)

  • win7、win8.1怎么更换系统壁纸?win8.1更换系统壁纸操作(win7怎么装win8系统)

    win7、win8.1怎么更换系统壁纸?win8.1更换系统壁纸操作(win7怎么装win8系统)

  • win7系统录音设备找不到麦克风提示“未安装音频设备”的解决方法(windows7录音怎么录)

    win7系统录音设备找不到麦克风提示“未安装音频设备”的解决方法(windows7录音怎么录)

  • nodejs中实现阻塞实例(nodejs quic)

    nodejs中实现阻塞实例(nodejs quic)

  • 基于JavaScript代码实现pc与手机之间的跳转(javascript的代码写在哪里)

    基于JavaScript代码实现pc与手机之间的跳转(javascript的代码写在哪里)

  • 资产负债表应交税费
  • 小规模纳税人出售使用过的汽车
  • 库存股增加为什么资产减少
  • 接受投资专利技术科目
  • 研发支出管理制度
  • 印花税的三种缴税方式
  • 审计的基本流程是什么
  • 社保申报后不能缴费
  • 捐赠财产
  • 以前年度做的预算怎么查
  • 购买工程款计入什么科目
  • 金融服务利息
  • 收到的软件退税怎么处理
  • 补缴以前年度税费
  • 劳服企业可以安差额税上税吗?
  • 事业单位跨期发票的财务入账问题
  • 小规模纳税人税率有几种
  • 税务局代开票流程是怎样的?
  • 服务费发票怎么做分录
  • 企业税收负担率一般达到多少算正常
  • 工会经费给税务局交税比例
  • 电子发票可以做报销凭证吗
  • 广告公司可以开服务费吗
  • 其他应付款转营业外收入说明
  • 印花税减半征收会计分录怎么做
  • 经营租赁的固定资产计提折旧吗
  • 走物流的货物如何收费
  • 企业为员工支付房租交个税吗
  • 公司注销清算债权委托另一股东处理
  • 受托代理资产核算
  • 高新技术研发的会议有哪些
  • vbs win10
  • 购买原材料折扣做什么会计科目
  • 鸿蒙系统进入工程菜单
  • php ftp管理系统
  • 广告宣传费的税收筹划
  • echarts引入地图
  • php连接mysql8.0
  • React18的useEffect会执行两次
  • php的运算符主要包括哪些?
  • php冒泡法排序
  • 多线程 cpp
  • pdca安全管理方法
  • html常用标签有哪些
  • dedecms怎么更换模板
  • mongodb数据库是哪个公司的
  • 异地如何申报纳税
  • 行政事业单位工作时间
  • 资本公积的用途有哪些
  • 出口退税如何做进料核销凭证
  • 预提成本和冲回成本金额不一致情况说明
  • 小规模开票的税点是多少
  • 年终奖金个人所得
  • 营改增后增值税税率的调整
  • 给客户买的礼品要交税吗
  • 农业开发公司的名称有哪些
  • 零售行业折扣销售方案
  • 三栏式明细账需要结账吗
  • 个体工商户在什么情况下需要纳税
  • mysql日期用什么数据类型
  • fedora workstation怎么安装
  • 三星笔记本预装win8改win7好吗
  • win10系统如何快速打开控制面板
  • win10系统开机蓝屏怎么修复
  • w10升级失败怎么办
  • ubuntu20.04安装samba
  • 后缀是nb是什么程序
  • linux关闭sh
  • win10系统无法进入
  • win7的cpu怎么看
  • win10电脑补丁 kb5000802
  • 关于我和鬼变成家人的那件事
  • python 源码解析
  • 适配是什么
  • webview清除数据
  • js延时加载的方法
  • 河南洛阳医疗保险电话
  • 一季度土地市场
  • 出口退税额与出口退税收入
  • 物业优质服务我们在行动
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设