灵活使用asp.net中的gridview控件

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

 综上我觉得这个分页总体上来说比较好的效率也非常的高且分页只需要执行一次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

2  、封装c#调用语句

我们总是习惯上对代码进行封装,这样可以提高代码的阅读效率,维护起来也更加方便,养成良好的封装代码习惯,我们就从初级步入了中级,其实这只是个习惯而已

public static class PageHelper { /// <summary> /// 分页数据 /// </summary> /// <param>表明</param> /// <param>返回字段</param> /// <param>条件</param> /// <param>每页记录数</param> /// <param>当前页数</param> /// <param>总记录数</param> /// <param>排序字段</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></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; } } }

3、 gridview利用第三方插件实现分页

分页现在比较流行的插件是aspnetpager,这是一个比较成熟的插件,网上也有许多的例子。

1 )、下载aspnetpager插件,然后右键引用。

2 )、 打开工具箱,在选项卡上右键选择项导入插件

3 )、拖控件到页面,设置控件的属性

后台代码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwjfz.html