使用LINQ实现数据分页

来源:互联网 发布:web数据挖掘是指 编辑:程序博客网 时间:2024/04/28 14:03

来源:C#编程宝典 例13.12

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LinqPages
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //创建LINQ对象
        LinqClassDataContext linqDataContext = new LinqClassDataContext();
        int pageSize = 7;//设置每页显示7条记录
        int page = 0;//记录当前页

        private void Form1_Load(object sender, EventArgs e)
        {
            page = 0;//设置当前页面
            bindGrid();//调用自定义bindGrid方法绑定DataGridView控件
        }

        private void btnFirst_Click(object sender, EventArgs e)
        {
            page = 0;//设置当前页面为首页
            bindGrid();//调用自定义bindGrid方法绑定DataGridView控件
        }

        private void btnBack_Click(object sender, EventArgs e)
        {
            page = page - 1;//设置当前页数为当前页数减一
            bindGrid();//调用自定义bindGrid方法绑定DataGridView控件
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            page = page + 1;//设置当前页数为当前页数加一
            bindGrid();//调用自定义bindGrid方法绑定DataGridView控件
        }

        private void btnEnd_Click(object sender, EventArgs e)
        {
            page = getCount() - 1;//设置当前页数为总页面减一
            bindGrid();//调用自定义bindGrid方法绑定DataGridView控件
        }

        /// <summary>
        /// 对DataGridView控件进行数据绑定
        /// </summary>
        protected void bindGrid()
        {
            int pageIndex = Convert.ToInt32(page);//获取当前页数
            //使用LINQ查询,并对查询的数据进行分页
            var result = (from v in linqDataContext.Address
                          select new
                          {
                              地址编号 = v.AddressID,
                              城市 = v.City,
                              邮政编码 = v.PostalCode,
                              省份编号 = v.StateProvinceID
                          }).Skip(pageSize * pageIndex).Take(pageSize);
            dgvInfo.DataSource = result;//设置DataGridView控件的数据源
            btnEnd.Enabled =btnFirst.Enabled=btnBack.Enabled=btnNext.Enabled = true;
            //判断是否为第一页,如果为第一页,禁用首页和上一页按钮
            if (page == 0)
            {
                btnFirst.Enabled = btnBack.Enabled = false;
            }
            //判断是否为最后一页,如果为最后一页,禁用尾页和下一页按钮
            if (page == getCount() - 1)
            {
                btnEnd.Enabled = btnNext.Enabled = false;
            }
        }

        /// <summary>
        /// 获取总页数
        /// </summary>
        /// <returns>返回得到的总页数</returns>
        protected int getCount()
        {
            int sum = linqDataContext.Address.Count();//设置总数据行数
            int s1 = sum / pageSize;//获取可以分的页面
            //当总行数对页数求余后是否大于0,如果大于获取1否则获取0
            int s2 = sum % pageSize > 0 ? 1 : 0;
            int count = s1 + s2;//计算出总页数
            return count;
        }
    }
}