GridView自定义分页

有时候的只是需要一些简单的但却是自定义的分页功能,但是又舍不得objectdatasource的排序功能,那就只有把pageddatasoure和objectdatasour结合起来,

由于pageddatasource实现的是IEnumberable,直接把objectdatasource赋给它是不行的,但是它的select()方法,却正好可以如愿:

1 ods.SelectParameters["strWhere"].DefaultValue = "1=1";
2
3 PagedDataSource ps = new PagedDataSource();
4  int currentPage = int.Parse(txtcurrentPage.Text);
5 ps.DataSource = ods.Select();

 

更新:

以上误,一旦gridview的数据源不再是objectdatasource,sorting功能也随即失效,而且还会报错,因为没有响应onsorting方法,我去编写sort方法的时候,却发现gridview的sortExpression和sortDirection都是只读的,也就是说,不能通过简单的只改属性的方法让其顺利排序,那么,就得用代码手动排序了,这样还有什么用gridview的方便所在?放弃吧。。

你有什么折衷的方法呢?

 

解决:

既然要求的分页不是太复杂,就用了<PagerTamplate>自定义分页,这样排序的问题就不需要考虑了。

并于此处找到相应方法:

当前页

1 <asp:Label ID="LabelCurrentPage" runat="server"
2 Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label>

总页数

1 <asp:Label ID="LabelPageCount" runat="server"
2 Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>

首页,尾页,上一页,下一页

ContractedBlock.gifExpandedBlockStart.gif代码
1 <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"
2 Visible="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">首页</asp:LinkButton>
3
4  <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" CommandName="Page"
5 Visible="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">上一页</asp:LinkButton>
6
7  <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"
8 Visible="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">下一页</asp:LinkButton>
9
10  <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"
11 Visible="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">尾页</asp:LinkButton>

另外,我要的要求是里面有个文本框,既显示当前页,又可以通过一个按钮跳转到文本框里输入的页码,却不知道如何传入这个页码,

本来应该产生如下形式的代码

1 CommandName="Page" CommandArgument="xxx"

 这个commandArgument我试过用<%# (((GridView)Container).FindControl("") as TextBox).Text %>的方式,结果显然得不到你手动输入的页码,最后还是简单地用了一个onClick来完成这个要求,即在onClick里面设置该button的 CommandName="Page" CommandArgument=页码文本框的值,搞定。

页面:

ContractedBlock.gifExpandedBlockStart.gif代码
1 <asp:TextBox ID="txtcurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"
2 Width="20px" MaxLength="3" CssClass="txttopage"></asp:TextBox>
3  <asp:Button ID="btngopage" runat="server" Text="go" OnClick="getCustPage" OnClientClick="return ToPage();" />

 

后台:

ContractedBlock.gifExpandedBlockStart.gif代码
1 protected void getCustPage(object sender, EventArgs e)
2 {
3 Button btn = sender as Button;
4 btn.CommandName = "Page";
5 btn.CommandArgument = ((btn.NamingContainer as GridViewRow).FindControl("txtcurrentPage") as TextBox).Text;
6 }

 

========其它===========

1,分页那一行叫做BottomPagerRow,需要到这一行找控件的话要注意。而且请注意,这一行是froeach gridview.rows找不到的,我曾经这样试过,结果无功而返。

2,所以,可以这样让分页行一直保持存在(有时候确实有这样的需求),响应前台GridView的onPreRender方法

ContractedBlock.gifExpandedBlockStart.gif代码
1 protected void renderview(object sender, EventArgs e)
2 {
3 GridViewRow gvr = (sender as GridView).BottomPagerRow;
4 if (gvr != null)
5 {
6 gvr.Visible = true;
7 }
8 (gvr.FindControl("ddlPageSize") as DropDownList).SelectedValue = gridList.PageSize.ToString();
9
10 PagedDataSource ps = new PagedDataSource();
11 ps.DataSource = ods.Select();
12 (gvr.FindControl("lblTotalRecord") as Label).Text = ps.DataSourceCount.ToString();
13
14 this.hidcurpage.Value = (gridList.PageIndex + 1).ToString();
15 }

同时可以看到,因为gridview没有统计记录条数的方法,结果我还是用了pageddatasource,另外,数据重绑的时候貌似分页行的控件状态都刷新了,那么我只有在prerender的时候把它们全绑进去,如12,14行。

3,同1,表首行就应该是HeaderRow,总而言之,就是DataControlRowType的几个类型(DataRow,EmptyDataRow,Footer,Header,Pager,Separator)

转载于:https://www.cnblogs.com/walkerwang/archive/2010/04/27/1722325.html

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

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

相关文章

在朋友圈求助的NTP问题~

之前朋友圈求助的问题最后是我一个朋友尝试了一天的配置「这个配置尝试的过程需要技术基础&#xff0c;但是不管如何的技术基础都是需要去不断的尝试的」&#xff0c;终于找到了方法&#xff0c;所以~我给他们送了秋天的第一杯奶茶~「是他们是因为他们都是一群我很喜欢的同事」…

聊聊身边的嵌入式,英语学习利器点读笔

家里有小孩的朋友&#xff0c;可能对下面的这款产品不陌生。点读笔&#xff0c;一个会发声的电子产品&#xff0c;我当时为了给孩子做英语启蒙&#xff0c;买了小达人点读笔(上图最下方那个&#xff0c;另外两个分别是宝玩英语和巧虎配套的点读笔)&#xff0c;用了好几年了&…

EasyUI_datagrid

案例一丶jquery.easyui.min.js:10631 Uncaught TypeError: this.renderEmptyRow is not a function 解决方法&#xff1a;datagrid记录为空就会报错。是easyui里没处理return 空的方法。需要进行添加一些东西。具体我也不清楚&#xff0c; 案例二丶清除datagrid右侧空白区域 查…

三枚硬币自制收音机

大家好&#xff0c;我是记得诚。我们称这个收音机为三个硬币收音机是因为我们使用了三个硬币作为锚点&#xff0c;连接收音机各个部件&#xff0c;这将使我们的制作过程变得极为简单。在这个收音机中我们使用了一个特殊的10晶体管集成电路&#xff0c;使最后做出的收音机效果非…

双重检查锁实现单例模式的线程安全问题

一、结论 双重校验锁的单例模式代码如下&#xff1a; public class Singleton {   private static Singleton singleton; private Singleton() {} public static Singleton getSingleton() {     if (singleton null) { // 1       synchronized (Singleton.clas…

摇杆控制方向原理_为工业安全守好”门”!各种方向的控制阀原理图大集合

单向的、换向的....你想了解的方向控制阀都在这里了&#xff01;方向控制阀门液压阀是用来控制液压系统中油液的流动方向或调节其流量和压力的。方向控制阀作为液压阀的一种&#xff0c;利用流道的更换控制着油液的流动方向。单向型方向控制阀是只允许气流沿一个方向流动的方向…

对于新生代农民工,你有什么想说的?

昨晚上这个新闻很多人转&#xff0c;但是可能很少有人知道他的链接出处&#xff0c;链接来自于http://www.mohrss.gov.cn/SYrlzyhshbzb/jiuye/gzdt/202108/t20210816_420736.html我记得我还在上小学的时候&#xff0c;我们家有干不完的农活&#xff0c;暑假每天都要下田干活&am…

谁是经营之神

—北京维富友携手北京服装学院开展服装ERP沙盘大赛时间4月21日&#xff0c;地点北京服装学院&#xff0c;参加人数35人&#xff0c;参加人员北京维富友软件公司高级讲师、服装学院教师和同学共35人。目的&#xff1a;为了让学生更好的掌握服装企业管理和盈利管控&#xff0c;北…

在Android初次的前期学习中的二个小例子(2)

Hello13:SQLite数据库 一、简述SQLite的概念和主要特性SQLite是一个轻量级的关系型数据库&#xff0c;运算速度快&#xff0c;占用资源少&#xff0c;使用非常方便&#xff0c;支持SQL语法标准和数据库事务原则。相对于SharedPreferences使用文件保存数据&#xff0c;SQLite具有…

access 增加字段 工具_Java效率工具之Lombok

作者&#xff1a;LiWenD正在掘金来源&#xff1a;https://juejin.im/post/5b00517cf265da0ba0636d4b上一篇&#xff1a;数据库查询速度优化之解决技巧还在编写无聊枯燥又难以维护的POJO吗&#xff1f;洁癖者的春天在哪里&#xff1f;请看Lombok&#xff01;在过往的Java项目中&…

一文读懂 | 进程并发与同步

并发 是指在某一时间段内能够处理多个任务的能力&#xff0c;而 并行 是指同一时间能够处理多个任务的能力。并发和并行看起来很像&#xff0c;但实际上是有区别的&#xff0c;如下图&#xff08;图片来源于网络&#xff09;&#xff1a;concurrency-parallelism上图的意思是&a…

rust卡领地柜权限_RFID智能医疗耗材柜,上海智能高值耗材柜,国药智能医用耗材柜...

近几年因为我们的医疗改革一直在进步并改革&#xff0c;国家对我们的医疗方面的补助也有了明显的加大投入&#xff0c;与此同时让各种公立私立医院如雨后春笋般层出不穷&#xff0c;各大医院为了在医疗市场占有一席之地&#xff0c;都在各个方面开始想办法提升自己医院的水准。…

刚接触电子时,有过哪些百思不得其解的问题?

青少年时期&#xff0c;刚接触电子时&#xff0c;出于好奇&#xff0c;对这方面的东西也比较关注&#xff0c;但同时也衍生了一些百思不得其解的疑问&#xff0c;比如...01物理书里说大地是导体&#xff0c;那为什么我的小灯珠却不亮&#xff01;&#xff1f;02初三时学了物理的…

建立管理SQL Server登录帐户

1、打开SQL Server 2005的管理工具&#xff0c;选择以windows身份验证模式登陆。然后右击服务器选择属性。2、在打开的服务器属性页面中&#xff0c;选择“安全性”做如下图设置&#xff1a;3.在windows上新建三个组:ReceptionEmployees&#xff0c;ITEmployees。4、然后在SQL …

c++ doxygen 注释规范_利用Doxygen给C程序生成注释文档

利用Doxygen为C程序生成注释文档一、Doxygen工具的安装利用Doxygen工具生成API帮助文档需要下载安装以下三个软件&#xff1a;(1)Doxygen&#xff1a;可以从一套归档源文件开始&#xff0c;生成HTML格式的在线类浏览器&#xff0c;或离线的LATEX、RTF参考手册。本文中所使用的版…

【2021新版】一线大厂 Go 面试题合集

秋天到了&#xff0c;又到了工程师们躁动不安&#xff0c;蠢蠢欲动的季节~这不&#xff0c;金九银十已然到了家门口&#xff0c;现在后台就有不少人问我&#xff1a;现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备Go 开发前景如何啥样的后端适合切 Go 技术栈...面试…

python开发【基础二】

基本数据类型&#xff1a; 1、数字 在Python2中&#xff0c;分为整形(int)和长整形(long)。 在Python3中&#xff0c;都是int。 #1、将字符串转换为数字 a "123" v int(a) print(v) print(type(v))#2、当前数字的二进制&#xff0c;至少用几位表示 1位等于8个字节.…

can总线资料

应知识星球的同学要求&#xff0c;整理了一些can总线资料。在公众号后台回复 【can总线】获取资料截图推荐阅读&#xff1a;专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈

Go语言基础之4--流程控制

一、if else语句 1.1 基本语法1 语法1&#xff1a; if condition { //do something } 语法2&#xff1a; if condition { //do something } else { //do something } 语法3&#xff1a; if condition { //do something } else if condition { //do something } else { //do som…

大家都挺难的​

这是昨天小号发的一个推文小时候觉得读书苦 但是现在想想&#xff0c;如果那时候跟现在一样用功 考上北大清华都没问题然后想到跟我家小云聊天的内容&#xff0c;挺有感触的。小云最近在我们小区的业委会上班&#xff0c;业委会在我家旁边&#xff0c;上班就是从这栋楼到另一栋…