C# 利用Skip()和Take()分頁展示數據

效果圖:

數據內容:json格式的數據

[
    {
        "id": 1001,
        "stuname": "小王"
    },
    {
        "id": 1002,
        "stuname": "瓦工是"
    },
    {
        "id": 1003,
        "stuname": "他王王"
    },
    {
        "id": 1004,
        "stuname": "小王4"
    },
    {
        "id": 1005,
        "stuname": "瓦工是5"
    },
    {
        "id": 1006,
        "stuname": "他王王6"
    },
    {
        "id": 1007,
        "stuname": "小王7"
    },
    {
        "id": 1008,
        "stuname": "瓦工是8"
    },
    {
        "id": 1009,
        "stuname": "他王王9"
    },
    {
        "id": 1010,
        "stuname": "小王10"
    },
    {
        "id": 1011,
        "stuname": "瓦工是11"
    },
    {
        "id": 1012,
        "stuname": "12他王王"
    }
]

新建一個類:StudentInfo

public class StudentInfo
    {
        public int Id { get; set; }
        public string StuName { get; set; }
    }

窗體主界面代碼:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp6
{
    public partial class MainFrm : Form
    {
        private int rows = 0;//總行數
        private int currentPage = 1;//當前頁
        private List<StudentInfo> students = new List<StudentInfo>();
        public MainFrm()
        {
            InitializeComponent();
            dgvStudent.AutoGenerateColumns = false;
            cobPagesize.SelectedIndex = 0;
            Init();
        }
        private void Init()
        {
            string studentStr = File.ReadAllText("File\\student.txt");
            students = JsonConvert.DeserializeObject<List<StudentInfo>>(studentStr);
            rows = students.Count();
            lblRows.Text = $"總共有[{rows.ToString()}]條數據";
            lblCurrentPage.Text = $"當前第[{currentPage}]頁";
            dgvStudent.DataSource = students.Take(Convert.ToInt32(cobPagesize.Text)).ToList();
        }
        //首頁
        private void Btn_shou_Click(object sender, EventArgs e)
        {
            currentPage = 1;
            DataLoad(currentPage, Convert.ToInt32(cobPagesize.Text));
        }
        //下一頁
        private void Btn_xia_Click(object sender, EventArgs e)
        {
            int i = rows % Convert.ToInt32(cobPagesize.Text) == 0 ? rows / Convert.ToInt32(cobPagesize.Text) : (rows / Convert.ToInt32(cobPagesize.Text)) + 1;
            if (currentPage == i)
            {
                return;
            }
            currentPage++;
            DataLoad(currentPage, Convert.ToInt32(cobPagesize.Text));
        }
        //上一頁
        private void Btn_shang_Click(object sender, EventArgs e)
        {
            if (currentPage == 1)
            {
                return;
            }
            currentPage--;
            DataLoad(currentPage, Convert.ToInt32(cobPagesize.Text));
        }
        //尾頁
        private void Btn_wei_Click(object sender, EventArgs e)
        {
            //總頁數=總行數/每頁的行數(如果除不盡則+1)
            currentPage = rows % Convert.ToInt32(cobPagesize.Text) == 0 ? rows / Convert.ToInt32(cobPagesize.Text) : (rows / Convert.ToInt32(cobPagesize.Text)) + 1;
            DataLoad(currentPage, Convert.ToInt32(cobPagesize.Text));
        }
        //切換每頁多少條展示
        private void CobPagesize_SelectedIndexChanged(object sender, EventArgs e)
        {
            currentPage = 1;
            DataLoad(currentPage, Convert.ToInt32(cobPagesize.Text));
        }
        /// <summary>
        /// 重新綁定數據
        /// </summary>
        /// <param name="currentPage">當前頁</param>
        /// <param name="pageSize">每頁多少條</param>
        private void DataLoad(int currentPage, int pageSize)
        {
            lblCurrentPage.Text = $"當前第[{currentPage}]頁";
            dgvStudent.DataSource = students.Skip(currentPage * pageSize - pageSize).Take(pageSize).ToList();
        }
    }
}

記錄一下。。。以免以後需要翻項目麻煩。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章