不想当码农通过本文主要向大家介绍了gridview asp.net,asp:gridview,asp gridview分页,asp:gridview属性,gridview控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
gridview是asp.net常用的显示数据控件,对于.net开发人员来说应该是非常的熟悉了。gridview自带有许多功能,包括分页,排序等等,但是作为一个.net开发人员来说熟练掌握利用存储过程分页或者第三方自定义分页十分重要,这不仅是项目的需要,也是我们经验能力的提示,下面我就来讲利用存储过程分页实现绑定gridview
1、执行存储过程
网上有许多sql分页存储过程的例子,但是你会发现其中有许多一部分是不能用的,例如有些使用in或者not in来分页效率非常的低,有些sp可以分页但是扩展型非常差,有些效率也比较高,但是不能返回查询记录总数,
例如下面的这个分页,尽管比较简单,但是用not in来分页效率比较低,且查询表已经固定死了,无法扩展,其实是个失败的分页
CREATE PROCEDURE GetProductsByPage @PageNumber int, @PageSize int AS declare @sql nvarchar(4000) set @sql = 'select top ' + Convert(varchar, @PageSize) + ' * from test where id not in (select top ' + Convert(varchar, (@PageNumber - 1) * @PageSize) + ' id from test)' exec sp_executesql @sql GO</div>
综上我觉得这个分页总体上来说比较好的效率也非常的高且分页只需要执行一次sp,分页支持多表多标间查询
ALTER PROCEDURE [dbo].[Proc_SqlPageByRownumber] ( @tbName VARCHAR(255), --表名 @tbGetFields VARCHAR(1000)= '*',--返回字段 @OrderfldName VARCHAR(255), --排序的字段名 @PageSize INT=20, --页尺寸 @PageIndex INT=1, --页码 @OrderType bit = 0, --0升序,非0降序 @strWhere VARCHAR(1000)='', --查询条件 @TotalCount INT OUTPUT --返回总记录数 ) AS -- ============================================= -- Author: allen (liyuxin) -- Create date: 2012-03-30 -- Description: 分页存储过程(支持多表连接查询) -- Modify [1]: 2012-03-30 -- ============================================= BEGIN DECLARE @strSql VARCHAR(5000) --主语句 DECLARE @strSqlCount NVARCHAR(500)--查询记录总数主语句 DECLARE @strOrder VARCHAR(300) -- 排序类型 --------------总记录数--------------- IF ISNULL(@strWhere,'') <>'' SET @strSqlCount='Select @TotalCout=count(*) from ' + @tbName + ' where 1=1 '+ @strWhere ELSE SET @strSqlCount='Select @TotalCout=count(*) from ' + @tbName exec sp_executesql @strSqlCount,N'@TotalCout int output',@TotalCount output --------------分页------------ IF @PageIndex <= 0 SET @PageIndex = 1 IF(@OrderType<>0) SET @strOrder=' ORDER BY '+@OrderfldName+' DESC ' ELSE SET @strOrder=' ORDER BY '+@OrderfldName+' ASC ' SET @strSql='SELECT * FROM (SELECT ROW_NUMBER() OVER('+@strOrder+') RowNo,'+ @tbGetFields+' FROM ' + @tbName + ' WHERE 1=1 ' + @strWhere+' ) tb WHERE tb.RowNo BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND ' +str(@PageIndex*@PageSize) exec(@strSql) SELECT @TotalCount END</div>
2 、封装c#调用语句
我们总是习惯上对代码进行封装,这样可以提高代码的阅读效率,维护起来也更加方便,养成良好的封装代码习惯,我们就从初级步入了中级,其实这只是个习惯而已
public static class 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 name="sortField">排序字段</param> /// <returns></returns> public static DataTable GetPageList(string tbName, string tbGetFields, string OrderFldName, int PageSize, int PageIndex, int OrderType, string strWhere, out int TotalCount) { SqlCommand cmd = new SqlCommand("Proc_SqlPageByRownumber");//存储过程名称 cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@tbName", tbName);//表名称 cmd.Parameters.AddWithValue("@tbGetFields", tbGetFields);//要显示的字段名(不要加Select) cmd.Parameters.AddWithValue("@OrderfldName", OrderFldName);//排序索引字段名 cmd.Parameters.AddWithValue("@PageIndex", PageIndex);//当前第几页,页码 cmd.Parameters.AddWithValue("@PageSize", PageSize);//每页显示的数据条数 cmd.Parameters.AddWithValue("@OrderType", OrderType);//设置排序类型,非0值则降序 cmd.Parameters.AddWithValue("@strWhere", strWhere);//查询条件,不要加where cmd.Parameters.Add(new SqlParameter("@TotalCount", SqlDbType.Int)); cmd.Parameters["@TotalCount"].Direction = ParameterDirection.Output; DataTable dt = RunProcedureCmd(cmd); TotalCount = Convert.ToInt32(cmd.Parameters["@TotalCount"].Value.ToString());//返回的总页数 return dt; } /// <summary> /// 执行存储过程,返回DataTable /// </summary> /// <param name="cmd"></param> /// <returns></returns> public static DataTable RunProcedureCmd(SqlCommand cmd) { DataTable result = new DataTable(); string connectionString = ConfigurationManager.AppSettings["CONNSTRING"].ToString(); SqlConnection conn = new SqlConnection(connectionString);//你自己的链接字符串 try { if ((conn.State == ConnectionState.Closed)) { conn.Open(); } cmd.Connection = conn; SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(result); da.Dispose(); conn.Close(); conn.Dispose(); return result; } catch (Exception ex) { conn.Close(); conn.Dispose(); throw ex; } } }</div>
3、 gridview利用第三方插件实现分页
分页现在比较流行的插件是aspnetpager,这是一个比较成熟的插件,网上也有许多的例子。
1 )、下载aspnetpager插件,然后右键引用。
2 )、 打开工具箱,在选项卡上右键选择项导入插件
3 )、拖控件到页面,设置控件的属性
后台代码
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridViewBind(""); } } private void GridViewBind(string sqlWhere) { int TotalCount; DataTable dt = bll.GetList("stu_score", "code,name,beginTime,endTime,score", "id", this.AspNetPager1.PageSize, this.AspNetPager1.CurrentPageIndex, 1,sqlWhere, out TotalCount); this.AspNetPager1.RecordCount = TotalCount; this.GridView1.DataSource = dt; this.GridView1.DataBind(); this.AspNetPager1.CustomInfoHTML = string.Format("当前第{0}/{1}页 共{2}条记录 每页{3}条", new object[] { this.AspNetPager1.CurrentPageIndex, this.AspNetPager1.PageCount, this.AspNetPager1.RecordCount, this.AspNetPager1.PageSize }); } //GridView高亮行显示 protectedvoid GridView1_RowDataBound1(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor,this.style.backgroundColor='#C7DEF3'"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c"); } }</div>
前台代码
<table width="100%"> <tr> <td style="width: 60%; float: left;"> beginTime:<asp:TextBox ID="txtBeginTime" runat="server"></asp:TextBox> endTime:<asp:TextBox ID="txtEndTime" name="mydate" runat="server"></asp:TextBox> </td> <td style="width: 30%; float: right;"> <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" class="ui-button ui-widget ui-state-default ui-corner-all"></asp:Button&g
您可能想查找下面的文章:
- ASP.NET GridView的Bootstrap分页样式
- asp.net实现固定GridView标题栏的方法(冻结列功能)
- 在ASP.NET 2.0中操作数据之六十四:GridView批量添加数据
- 在ASP.NET 2.0中操作数据之六十三:GridView实现批量删除数据
- 在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据
- 在ASP.NET 2.0中操作数据之五十一:从GridView的页脚插入新记录
- 在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton
- 在ASP.NET 2.0中操作数据之二十八:GridView里的Button
- 在ASP.NET 2.0中操作数据之十五:在GridView的页脚中显示统计信息
- 在ASP.NET 2.0中操作数据之十二:在GridView控件中使用TemplateField