ObjectDataSource控件的分页、排序和筛选

本文介绍如何使用C#和LINQtoSQL实现高效的分页功能。通过ObjectDataSource控件及自定义类ProductsLINQPaging,文章详细展示了如何针对大量数据进行分页处理,并利用缓存提高应用程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

类别    C#语言

 

ObjectDataSource控件提供了两种方法对绑定到控件(比如GridView)的数据进行分页和排序:

  1. 通过用户界面进行分页,优点是容易设置,缺点是当数据量大时执行效率较低;

实现方法:

  1. 对GridView控件使用正确的数据源,比如:DataSet, Collection, DataTable或者DataView,但不能使用DataReader
  2. 在页面设置GridView控件分分页属性为True。AllowPaging="True"

 

  1. 通过设置ObjectDataSource的分页,优点是数据量大时执行效率较高,特别是如果配合Caching能极大的提高以数据驱动为主的网络应用程序的效率。

ObjectDataSource数据源的分页可以在类Class, 存储过程, LINQ to SQL查询中实现,下面以LINQ to SQL,Northwind数据库的Product表为例子来说明用法:

实例网站的文档结构如下图:

 

1、新建网页,添加LINQ to SQL Class,命名为Products,在Server Exploer中拖拽Northwind数据库的Product表到设计界面。

 

2、添加一个新类Class命名为roductsLINQPaging  

 

3、类中实现的方法如下:

 

ContractedBlock.gifExpandedBlockStart.gifProductsLINQPaging类
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Data.Linq;
 5using System.Web;
 6
 7ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
 8/// Summary description for ProductsLINQPaging
 9/// </summary>

10public class ProductsLINQPaging
11ExpandedBlockStart.gifContractedBlock.gif{
12    public ProductsLINQPaging()
13ExpandedSubBlockStart.gifContractedSubBlock.gif    {
14        //
15        // TODO: Add constructor logic here
16        //
17    }

18    public static IEnumerable<Product> GetProduct(int startRowIndex, int maximumRows)
19ExpandedSubBlockStart.gifContractedSubBlock.gif    {
20        ProductsDataContext db = new ProductsDataContext();
21        return db.Products.Skip(startRowIndex).Take(maximumRows);        
22    }

23    public int GetProductCount()
24ExpandedSubBlockStart.gifContractedSubBlock.gif    {
25        HttpContext context = HttpContext.Current;
26        if (context.Cache["ProductCount"== null)
27            context.Cache["ProductCount"= GetProductCountFromDB();
28        return (int)context.Cache["ProductCount"];
29
30    }

31    private static int GetProductCountFromDB()
32ExpandedSubBlockStart.gifContractedSubBlock.gif    {
33        ProductsDataContext db = new ProductsDataContext();
34        return db.Products.Count();
35 
36    }

37
38}

39

 

4、页面代码如下:

 

ContractedBlock.gifExpandedBlockStart.gifDefault.aspx页面代码
 1<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2
 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5<html xmlns="http://www.w3.org/1999/xhtml">
 6<head runat="server">
 7    <title></title>
 8</head>
 9<body>
10    <form id="form1" runat="server">
11    <div>
12    <asp:GridView ID="grdProduct" AllowPaging="True" runat="server" 
13            DataSourceID="srdProduct"></asp:GridView>
14    <asp:ObjectDataSource ID="srdProduct" EnablePaging="true" runat="server" SelectCountMethod="GetProductCount" SelectMethod="GetProduct" 
15            TypeName="ProductsLINQPaging">        
16        </asp:ObjectDataSource>
17    
18    </div>
19    </form>
20</body>
21</html>
22

转载于:https://www.cnblogs.com/apiaceae/archive/2009/02/14/1390783.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值