• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 灵活使用asp.net中的gridview控件

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

作者:不想当码农 字体:[增加 减小] 来源:互联网 时间:2017-05-11

不想当码农通过本文主要向大家介绍了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



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 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

相关文章

  • 2017-05-11如何改变asp.net项目名称
  • 2017-05-11c# indexof 用法深入理解
  • 2017-05-11asp.net生成缩略图实现代码
  • 2017-05-11asp.net AJAX实现无刷新获得数据
  • 2017-05-11.net 中的SqlConnection连接池机制详解
  • 2017-05-11c#中两种不同的存储过程调用与比较
  • 2017-05-11asp.net Google的translate工具翻译 API
  • 2017-05-11详解ASP.NET数据绑定操作中Repeater控件的用法
  • 2017-05-11ASP.NET中TimeSpan的用法实例解析
  • 2017-05-11在ASP.NET 2.0中操作数据之二十九:用DataList和Repeater来显示数据

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • smtp发送带附件的邮件代码分享
    • ASP.NET深度复制和浅度复制分析
    • ASP.NET中在一般处理程序中使用session的简单介绍
    • 自己常用到的自定义公共类(已测试通过)
    • asp.net 备份和恢复数据库的方法示例
    • .net WINFORM的GDI双缓冲的实现方法
    • net.sf.json 双引号丢失
    • ASP.NET(AJAX+JSON)实现对象调用
    • 解读ASP.NET 5 & MVC6系列教程(6):Middleware详解
    • GridView中checkbox"全选/取消"完美兼容IE和Firefox

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有