`
ch_kexin
  • 浏览: 897960 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

实现LINQ通用分页绑定方法

    博客分类:
  • Linq
阅读更多
在LINQ中,IQueryable <T>接口和IEnumerable <T>接口都分别提供了Skip方法和Take方法,用来做分页非常合适.因此我就想用他们做一个分页控件,因为IQueryable <T> 是继承自 IEnumerable <T> 的。因此使用接口仅需要针对后者就可以了。使用的时候只需提供数据源、绑定的GridView的、每页大小即可。现在问题就出了在数据源上,要求用户提供一个数据源类型,即IQueryable <T>接口和IEnumerable <T>接口? T是可确定类型(已知类型)的话还可以,若T是匿名类型,如
引用

var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country }; 


  list的类型只有在运行时才能得到,怎么办呢!其实很简单我,我们可以使用 “参数推导泛型类型”的方法来实现:

  看下面的代码(因为重点不在这里所以 代码写的比较粗糙):
public void BindBoundControl<TSource>(IEnumerable<TSource> DataSource, GridView BoundControl, int PageSize)
        {
            //获取总记录数(这里可以使用参数传入总页数 就不必每次都执行下面方法)
            int totalRecordCount = DataSource.Count();
            //计算总页数
            int totalPageCount = 0;
            if (PageSize == 0)
            {
                PageSize = totalRecordCount;
            }
            if (totalRecordCount % PageSize == 0)
            {
                totalPageCount = totalRecordCount / PageSize;
            }
            else
            {
                totalPageCount = totalRecordCount / PageSize + 1;
            }
            //从参数中获取当前页码
            int CurrentPageIndex = 1;
            //如果从参数中获取页码不正确 设置页码为第一页
            if (!int.TryParse(HttpContext.Current.Request.QueryString["Page"], out CurrentPageIndex) || CurrentPageIndex <= 0 || CurrentPageIndex > totalPageCount)
            {
                CurrentPageIndex = 1;
            }
            //绑定数据源
            BoundControl.DataSource = DataSource.Skip((CurrentPageIndex - 1) * PageSize).Take(PageSize);
            BoundControl.DataBind();
        }

调用
protected void Page_Load(object sender, EventArgs e)
        {
            NorthwindEntities de = new NorthwindEntities();
            BindingUtils bind = new BindingUtils();
            //先排序与一下再绑定
            bind.BindBoundControl<Customers>(de.Customers.OrderBy(v=>v.CustomerID), this.GridView1, 10);  
        }

        

  下面我们只是需要重载一下我们的分页方法实现“参数推导泛型类型”就可以了 代码如下:
        public void BindBoundControl<TSource>(IEnumerable<TSource> DataSource, TSource type, GridView BoundControl, int PageSize)
        {
            this.BindBoundControl(DataSource, BoundControl, PageSize);
        }




  调用
 protected void Page_Load(object sender, EventArgs e)
        {
            NorthwindEntities de = new NorthwindEntities();
            var list = from it in de.Customers where it.City == "abc" select new { it.City, it.Country };
            BindingUtils bind = new BindingUtils();
            bind.BindBoundControl(list.OrderBy(c=>c.City), list.FirstOrDefault(), this.GridView1, 10);  
        }



       

  这个方法很简单的 只是通过 list.FirstOrDefault() 做参数 来推导 方法中 BindBoundControl<TSource> 的TSource 就可以了,当然因为每次分页时都会执行 list.FirstOrDefault() 会损失一点点的效率。

分享到:
评论

相关推荐

    用泛型实现aspnetpager分页的小程序

    在分页场景中,泛型可以让我们创建一个通用的分页方法,该方法可以处理任何实现了IEnumerable接口的数据类型,如List、ArrayList等。 2. **aspnetpager控件的使用**:ASP.NET提供了aspnetpager控件,它提供了友好的...

    ASP.NET数据分页通用高效方法

    总结来说,ASP.NET数据分页通用高效方法主要依赖于存储过程,通过合理的设计和优化,可以有效地处理大数据量的展示,提升系统性能,同时提供良好的用户体验。实践中,开发者应根据项目需求和环境选择最适合的数据...

    第7章 数据绑定控件

    实例232 分页绑定DataList数据并实现页面 跳转功能 365 实例233 开发针对DataList控件分页功能的 用户控件 368 实例234 使用DataList删除数据(支持批量 删除) 370 实例235 利用DataList控件智能化查看详细 信息 ...

    winform 分页控件 DevExpress版

    - **数据绑定**:控件能够轻松绑定到各种数据源,如DataTable、Entity Framework、LINQ to SQL等。 - **高级编辑功能**:内置多种编辑器类型,如日期、数字、文本等,支持自定义编辑模板。 - **多列排序**:允许...

    asp.net URL分页和数据库操作类

    如果使用Entity Framework或NHibernate等ORM,可以通过 LINQ 查询来实现分页。 5. **性能优化** 大量数据的分页需要考虑性能问题。避免一次性加载所有数据,而是只获取当前页的数据,减少内存占用。另外,可以使用...

    Web应用开发技术--数据绑定.ppt

    数据绑定有两种主要方式:通过设置`DataSourceID`属性与数据源控件结合,或者设置`DataSource`属性为LINQ查询结果并调用`DataBind()`方法。 【ListControl类控件】 ListControl是一个通用的控件,包括下拉列表框...

    asp.net 无刷新分页实例代码

    本文将以一段ASP.NET无刷新分页实例代码为基础,详细介绍其原理及实现方法。 #### 二、关键技术解析 ##### 2.1 数据类代码分析 该示例中的数据类`UserManageClass`实现了三个主要功能:获取总页数、获取每一页的...

    基于xml的留言本

    这种模式能够实现代码的通用性、可移植性、可维护性和功能可扩展性。 6. ObjectDataSource控件的使用 ObjectDataSource控件允许开发者从数据源控件中检索数据并绑定到***页面上。它支持分页、排序和选择等数据操作...

    ASP.NET 控件的使用

    16.1.4 绑定到LINQ to SQL查询 502 16.1.5 绑定到Web服务 503 16.2 使用ObjectDataSource控件与参数 506 16.2.1 使用不同的参数类型 509 16.2.2 作为参数传递对象 511 16.3 使用ObjectDataSource控件分页、排序和...

    ASP.NET3.5从入门到精通

    9.6.4 DataList 分页实现 9.6.5 使用SQLHelper 操作数据库 9.7 小结 第 10 章访问其他数据源 10.1 使用ODBC .NET Data Provider 第一篇窗口与界面编程 15 10.1.1 ODBC .NET Data Provider 简介 10.1.2 建立连接 10.2...

    RSS-XML Data-Binding to Data Control with Row Limitations

    XML则是结构化数据的通用语言,用于存储和传输数据,它定义了自定义标记,使数据具有可读性和可解析性。 在Web开发中,数据绑定是一种将数据源与UI控件连接起来的技术,使得当数据变化时,界面会自动更新,反之亦然...

    ASP.NET 3.5 开发大全11-15

    9.6.4 DataList分页实现 9.6.5 使用SQLHelper操作数据库 9.7 小结 第10章 访问其他数据源 10.1 使用ODBC .NET Data Provider 10.1.1 ODBC .NET Data Provider简介 10.1.2 建立连接 10.2 使用OLE DB.NET Data ...

    ASP.NET 3.5 开发大全

    9.6.4 DataList分页实现 9.6.5 使用SQLHelper操作数据库 9.7 小结 第10章 访问其他数据源 10.1 使用ODBC .NET Data Provider 10.1.1 ODBC .NET Data Provider简介 10.1.2 建立连接 10.2 使用OLE DB.NET Data ...

    ASP.NET 3.5 开发大全1-5

    9.6.4 DataList分页实现 9.6.5 使用SQLHelper操作数据库 9.7 小结 第10章 访问其他数据源 10.1 使用ODBC .NET Data Provider 10.1.1 ODBC .NET Data Provider简介 10.1.2 建立连接 10.2 使用OLE DB.NET Data ...

    ASP.NET 3.5 开发大全word课件

    9.6.4 DataList分页实现 9.6.5 使用SQLHelper操作数据库 9.7 小结 第10章 访问其他数据源 10.1 使用ODBC .NET Data Provider 10.1.1 ODBC .NET Data Provider简介 10.1.2 建立连接 10.2 使用OLE DB.NET Data ...

    NET面试指南及代码

    内容可能涉及SQL分页、ORM工具(如Entity Framework)的分页实现,以及前端分页的实现,比如使用jQuery或Vue.js等库。 综合这三个资源,你将得到一个全面的.NET面试准备教程,从理论到实践,从基础到高级,帮助你...

    ASPNET35开发大全第一章

    9.6.4 DataList分页实现 9.6.5 使用SQLHelper操作数据库 9.7 小结 第10章 访问其他数据源 10.1 使用ODBC .NET Data Provider 10.1.1 ODBC .NET Data Provider简介 10.1.2 建立连接 10.2 使用OLE DB.NET Data ...

Global site tag (gtag.js) - Google Analytics