在ASP.NET灵活使用gridview控件
Gridview是ASP.NET常用的显示数据控件,大家应该很熟悉。网络开发者。Gridview有很多功能,包括分页、排序等。但是作为一个. net开发者,掌握用存储过程分页或者第三方自定义分页是非常重要的,这不仅是项目的需要,也是对我们经验和能力的提醒。现在我将讨论将gridview与分页和存储过程绑定在一起。
1.执行存储过程。
网上有很多sql分页存储过程的例子,但是你会发现很多都是不可用的。例如,有些使用in或not in的页面效率非常低,有些SPs可以分页,但它们的扩展非常差,有些也非常高效,但它们不能返回查询记录的总数。
比如下面的分页虽然比较简单,但是在分页中使用not效率很低,查询表已经固定,无法扩展,实际上是一个失败的分页。
CREATE PROCEDURE getproductbypage @ page number int,@ page size intasedclare @ SQL nvarchar(4000)set @ SQL=' select top ' Convert(varchar,@ page size)' * from test where id not in(select top ' Convert(varchar,(@ page number-1)* @ page size)' id from test)' execsp _ executesql @ SQL go综上所述,我觉得这个分页总体来说还是不错的,效率也比较高,只需要执行sp一次,分页支持多表多标准查询。
更改程序[dbo]。[proc _ sqlpagebywnnumber](@ tbname VARCHAR(255),-table name @ tbgetfields VARCHAR(1000)=' *,-return field @ OrderfldName VARCHAR(255),-排序字段名称@ pagesizeint=20,-page size @ pageindexint=1,-page number @ ordertype bit=0,-0升序,但不是0降序@ strhere varchar (1000)=',-query condition @ total count int output-返回记录总数)为-=========-create date : 2012年3月30日-description: Paged存储过程(支持多表连接查询)-修改[1]。3360 2012年3月30日-=======================================================BeginDeclare @ Strsql Var。-查询记录总数Main语句declare @ str order varchar(300)-排序类型-记录总数-If为null (@ strhere,' ')“SET @ strSqlCount=”Select @ TotalCout=count(*)from“@ tbName”其中1=1 ' @ strWhere ELSE SET @ strSqlCount=”Select @ TotalCout=count(*)from ' @ tbName exec sp _ executesql @ strSqlCount,N'@TotalCout int output ',@ totalcount output-分页-If @ pagedesc ' ELSE SET @ strOrder=' ORDER BY '[email protected]' ASC ' SET @ strSql=' SELECT * FROM(SELECT ROW _ NUMBER)(' OVER '[email protected]')ROW no,@ tbGetFields ' FROM ' @ tbName ' WHERE 1=1 ' @ strWhere ')TB WHERE TB。row no BETWIN ' str((@ page index-1)* @ page size 1)和' str(@ page index * @ page size)exec(@ strsql)select @ total count end 2,封装c#调用语句。
我们总是习惯对代码进行打包,这样可以提高代码的阅读效率,让维护起来更加方便,养成对代码进行打包的好习惯,我们会从初级阶段步入中级阶段。其实这只是一种习惯。
公共静态类PageHelper { ///summary ///分页数据////summary///param name=' TableName '表明/param///param name=' RetureFields '返回字段/param ///param name='strWhere '条件/param ///param name='PageSize '每页记录数/param ///param name='CurPage '当前页数/param ///param name='RowCount '总记录数/param ///param名称='sortField '排序字段/param /返回/返回公共静态DataTable get page list(string tbName,string tbGetFields,string OrderFldName,int PageSize,int PageIndex,int OrderType,string strWhere,out int total count){ SqlCommand cmd=new SqlCommand(' Proc _ sqlpagebylownnumber ');//存储过程名称cmd .命令类型=命令类型StoredProcedurecmd .参数. AddWithValue('@tbName ',tbName);//表名称cmd .参数。AddWithValue('@tbGetFields ',tbGetFields);//要显示的字段名(不要加选择)cmd .参数。AddWithValue('@OrderfldName ',OrderfldName);//排序索引字段名cmd .参数. AddWithValue(“@ page index”,page index);//当前第几页,页码cmd .参数. AddWithVaLue(@ PageSize,PageSize);//每页显示的数据条数cmd .参数. AddWithValue(“@ order type”,order type);//设置排序类型,非0值则降序cmd .参数。AddWithValue('@strWhere ',strWhere);//查询条件,不要加其中cmd .参数。添加(新的SqlParameter('@TotalCount ',SqlDbType .int));cmd .参数["@ TotalCount"].方向=参数方向。输出;DataTable dt=RunProceecmd(cmd);总计=转换至t32(cmd .参数[' @ TotalCount ']。VaLue。ToString());//返回的总页数返回dt;} ///摘要///执行存储过程,返回DataTable////summary///param name=' cmd '/param///returns/returns public static DataTable run procedure cmd(SqlCommand cmd){ DataTable result=new DataTable();字符串连接字符串=配置管理器AppSettings[' CONNSRING '].ToString();SqlConnection conn=new SqlConnection(connectionString);//你自己的链接字符串尝试{ if((conn . State==ConnectionState .closed(){ conn . Open();} cmd .connection=connsqldatadapter da=new sqldatadapter(cmd);爸爸。填充(结果);爸爸dispose();conn . Close();conn . Dispose();返回结果;} catch(异常ex){ conn . Close();conn . Dispose();扔ex;} } }3、gridview利用第三方插件实现分页
分页现在比较流行的插件是aspnetpager寻呼机寻呼机,这是一个比较成熟的插件,网上也有许多的例子。
1 )、下载aspnetpager寻呼机寻呼机插件,然后右键引用。
2)、 打开工具箱,在选项卡上右键选择项导入插件
3 )、拖控件到页面,设置控件的属性
后台代码
受保护的无效页面_加载(对象发送方,事件参数e) { if(!IsPostBack){ GridView Bind(" ");} } private void GridViewBind(字符串SqlHere){ int TotalCount;数据表dt=bll .GetList('stu_score ','代码,名称,开始时间,结束时间,分数',' id ',这个.页面大小,这个AspNetPager1 .CurrentPageIndex,1,sqlWhere,out总计数);这个. aspnetpage 1。记录计数=总计数;这个. GridView1。数据源=dt这个GridView 1 .DataBind();这个AspNetPager1 .CustomInfoHTML=字符串。格式('当前第{0}/{1}页共{2}条记录每页{3}条,新对象[] {这个.当前页面索引,这个。页面计数,这个。记录计数,这个. aspnetpage 1。页面大小});} //GridView高亮行显示受保护的void GridView 1 _ RowDataBound 1(对象发送方,GridView Roweventargs e){ if(e . row。行类型==数据控制行类型.数据行)。属性。add(' onmouseover ',' c=this.style.backgroundColor,this。风格。背景色=' # C7def 3 ' ');e . row。属性。添加(' onmouseout ',' this。风格。background COlOr=c’;} } 前台代码
表格宽度=' 100% ' tr TD style=' width : 60%;'左侧浮动:begintime : asp: textbox ID=' txt begintime ' runat=' server '/asp: textbox end time : asp: textbox ID=' txtEndTime ' name=' my date ' runat=' server '/asp: textbox/TD style=' width : 30%;'右侧浮动:'asp:按钮ID=' BTN搜索' runat='服务器' Text=' Search ' OnClick=' BTN搜索_ Click ' class=' ui-button ui-widget ui-state-default ui-corner-all '/asp:按钮ASP :按钮ID=' btnAdd ' runat='服务器' Text=' Create ' OnClientClick=' JavaScript : return false ' '//TD/tr/TD col span=' 2 ' style=' width :'左侧浮动:'asp3360 GridView ID=' GridView 1 ' runat=' server ' Width=' 100% ' CellPadding=' 2 ' CSS class=' GridView style ' CellSpacing=' 2 ' AutoGenerateColumns=' False ' Columns as : bound field数据字段=' name '标头文本=' name '/asp3360 boundfield数据字段=' code '标头文本=' code '/asp: boundfield数据字段=' beginTime '首页LastPageText='尾页' NextPageText='下一页' PrevPageText='上一页CustomInfoHTML='共%RecordCount%条,第%CurrentPageIndex%页/共%页数%页custominfosection宽度=' 30% ' ShowCustomInfoSection=' Right '/web DIY : aspnetpager/TD/tr/table 4,当然你可以对你的gridview进行样式调整,新建gridviewSY.css。GridView样式{边框-右侧: 2px实心# A7A 6AA边框-bottom: 2px实心# A7A6AAborder-left: 2px纯白;边框-top: 2px纯白色;padding: 4px }。GridView样式a { color : # FFFFFF} .GridViewHeaderStyle th {边框-左侧: 1px实心# EBe9edBord-right : 1 px实心# EBE9ED}。GridViewHeaderStyle {底色: # 5d 7b 9d字体粗细:粗体;颜色:白色;} .GridViewFooterStyle {底色: # 5d 7b 9d字体粗细:粗体;颜色:白色;} .GridViewRowStyle {底色: # F7F 6 F3color: # 333333}。GridViewAlternatingRowStyle {底色: # FFFFFFcolor: # 284775}。GridViewRowStyle,td .GridViewAlternatingRowStyle TD {边框: 1px实心# EBE9ED}。GridViewSelectedRowStyle {底色: # e2de 6;字体粗细:粗体;color: # 333333}。GridViewPagerStyle {底色: # 284775;color: # FFFFFF}。GridViewPagerStyle表/*将分页链接居中*/{ margin : 0 auto 0 auto;分页控件也添加样式,当然gridview样式和分页样式在同一个钢性铸铁中了。分页器{ font: 11px Arial,Helvetica,无衬线;padd :10 px 20px 10px 0;margin: 0px}。分页器a { padding: 1px 6pxborder:固体1px # ddd背景# fff文本装饰:无;右边距:2px} .paginator a :访问了{ padd : 1px 6pxborder:固体1px # ddd背景# fff文本装饰:无;}.分页器CPB { padd : 1px 6pxfont-weight :粗体;font-size : 13pxborder:none} .paginator a :悬停{ color : # fff背景# ffa501边框颜色: # FFA 501文本装饰:无;}页面最总结果显示样式,
接下来我们给时间添加样式,给时间添加样式普遍选择的是日期选择器插件,导入控件所用的射流研究…和钢性铸铁
脚本src=' http : jquery-ui-1。9 .2 .custom/js/jquery-1。8 .3 .js ' type=' text/JavaScript '/script script src=' http : jquery-ui-1。9 .2 .自定义/开发-捆绑/ui/jquery。ui。小部件。js ' type=' text/JavaScript '/script script src=' http 3360 jquery-ui-1。9 .2 .习俗默认时间插件显示的是英文,我们给他汉化
新建initdatepicker_cn.js
函数initdatepicker _ CN(){ $。日期选择器。区域[' zh-CN ']={ cleartext : '清除,clearStatus: '清除已选日期,壁橱: '关闭,closeStatus: '不改变当前选择,prevText: '上月,prevStatus: '显示上月,prevBigText: ' ',prevBigStatus: '显示上一年,下一个文本: '下月,nextStatus: '显示下月,下一个大文本: ' ',下一个大状态3360 '显示下一年,currentText: '今天,currentStatus: '显示本月,monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月],monthNamesShort: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二],monthStatus: '选择月份,yearStatus: '选择年份,weekHeader: '周,weekStatus: '年内周次,日名: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六],daynameshort :['周日', '周一', '周二', '周三, '周四', '周五', '周六],dayNamesMin: ['日', '一', '二', '三', '四', '五', '六],日状态: '设置直接伤害为一周起始,日期状态: '选择m月d日,日,日期格式: '年月日',第一天: 1,初始状态: '请选择日期,isrtl : false };$ .日期选择器。setdefaults($。日期选择器。区域[' zh-CN ']);}前台页面添加jquery脚本,当然MainContent_txtBeginTime是你时间标签的id,有时候你可能显示不出来,不要着急右键查看源文件就会发现控件的编号和超文本标记语言标签的编号不一样,我们一定要选择标签的编号
脚本类型=' text/JavaScript ' jQuery(function(){ initdate picker _ cn();$('#MainContent_txtBeginTime ').日期选择器({ changemonth : true,change ear : true });});/script效果图:
如果你按照这四步去做的话,一个简单实用的分页显示页面就会展现的你的面前,欢迎大家进行讨论。
版权声明:在ASP.NET灵活使用gridview控件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















