使用LINQ实现数据分页

来源:互联网 发布:sql updata 语句使用 编辑:程序博客网 时间:2024/04/28 18:53

   使用LINQ可以很容易的实现数据分页功能,这主要通过应用两个泛型方法来实现。下面对这两个方法进行介绍。

  (1)IEnumberable.Skip泛型方法

   IEnumberable.Skip方法用来跳过序列中指定数量的元素,然后返回剩余的元素。语法如下:

    publicstatic IEnumberableSkip(

       this IEnumberablesource,int count)

   参数说明如下:

  source:一个IEnumberable,用于从中返回元素。

   count:返回剩余元素前要跳过的元素数量

   返回值:一个IEnumberable,包含输入序列中指定索引后出现的元素

  (2)IEnumberable.Take泛型方法

   IEnumberable.Take方法用来从序列的开头返回指定数量的连续元素。语法如下:

    publicstatic IEnumberableTake(

        this IEnumberablesource,int count)

   参数说明如下:

   source:要从中返回元素的序列。

    count:眼返回的元素数量。

   返回值:一个IEnumberable,包含输入序列开头的指定数量的元素

 

   下面给出示例:

   首先,建立LINQ数据源,连接数据库databaseName操作数据表Goods. 

   然后:

   //创建Linq对象
   LinqDBDataContext LDC = new LinqDBDataContext();
   //设置每页显示3行记录
    int pageSize= 3;

 

   //自定义GridView控件的数据绑定函数
    protectedvoid bindGrid()
    {
       //获取当前页面
       int pageIndex = Convert.ToInt32(ViewState["pageIndex"]);
       //使用Linq查询,并对查询的结果进行分页
       var result = (from v in LDC.Goods
                     select new
                     {
                         商品编号 = v.goodsID,
                         商品名称 = v.goodsName,
                         商品价格 = v.goodsPrice,
                         商品数量 = v.sumSell
                     }).Skip(pageSize *pageIndex).Take(pageSize);
       //设置GridView控件的数据源
       GVGoods.DataSource = result;
       //绑定GridView控件的数据源
       GVGoods.DataBind();
       LnkbtnFirst.Enabled = true;
       LnkbtnUp.Enabled = true;
       LnkbtnNext.Enabled = true;
       LnkbtnBottom.Enabled = true;
       //判断是否为第一页,如果为第一页,则隐藏“首页”和“上一页”超链接
       if (Convert.ToInt32(ViewState["pageIndex"]) == 0)
       {
           LnkbtnFirst.Enabled = false;
           LnkbtnUp.Enabled = false;
       }
       //判断是否为最后一页,如果为最后一页,则隐藏“尾页”和“下一页”超链接
       if (Convert.ToInt32(ViewState["pageIndex"]) == GetCount() -1)
       {
           LnkbtnNext.Enabled = false;
           LnkbtnBottom.Enabled = false;
       }
    }

  //自定义GetCount()方法,用来计算表中的数据一共可以分为多少页
    protectedint GetCount()
    {
       //设置总数据行数
       int Sum = LDC.Goods.Count();
       //获取可分的页数
       int s1 = Sum / pageSize;
       //总行数对页数求余后是否大于0,如果大于0获取1,否则获取0
       int s2 = Sum % pageSize>0 ? 1 : 0;
       //计算出总页数
       int pages = s1 + s2;
       return pages;
    }
    protectedvoid LnkbtnFirst_Click(object sender, EventArgs e)
    {
       //设置当前页为首页
       ViewState["pageIndex"] = 0;
       //调用自定义bindGrid()方法绑定GridView控件
       bindGrid();
    }

    protectedvoid LnkbtnUp_Click(object sender, EventArgs e)
    {
       //设置当前页为当前页数-1
       ViewState["pageIndex"] = Convert.ToInt32(ViewState["pageIndex"]) -1;
       //调用自定义bindGrid()方法绑定GridView控件
       bindGrid();
    }
    protectedvoid LnkbtnNext_Click(object sender, EventArgs e)
    {
       //设置当前页为当前页+1
       ViewState["pageIndex"] = Convert.ToInt32(ViewState["pageIndex"]) +1;
       //调用自定义bindGrid()方法绑定GridView控件
       bindGrid();
    }
    protectedvoid LnkbtnBottom_Click(object sender, EventArgs e)
    {
       //设置当前页为尾页
       ViewState["pageIndex"] = GetCount() - 1;
       //调用自定义bindGrid()方法绑定GridView控件
       bindGrid();
    }

0 0
原创粉丝点击