1. 程式人生 > >C# datagridview分頁功能

C# datagridview分頁功能

  winform開發是或多或少都會接觸datagridview控制元件,如果資料量大,那麼必須使用分頁功能,但是datagridview自身並沒有分頁,所以我們要自己實現。在網上搜了一些發現沒有太適合自己的,要麼嫌程式碼過於多不想看,要麼自己理解差無法明白其原理,所以打算自己寫一個,也希望幫到大家。

第一步:設定4個變數分別記錄每頁記錄數、總記錄數、總頁數、當前頁

        /// <summary>
        /// 每頁記錄數
        /// </summary>
        public int pageSize = 100;

        /// <summary>
/// 總記錄數 /// </summary> public int recordCount = 0; /// <summary> /// 總頁數 /// </summary> public int pageCount = 0; /// <summary> /// 當前頁 /// </summary> public int currentPage = 0;

第二步:構造一個虛擬table用於顯示(這裡不連線資料庫,如果需要自行更改),並算出總頁數、總記錄數。

DataTable table = new DataTable();

/// <summary>
/// 分頁的方法
/// </summary>
/// <param name="str"></param>
private void PageSorter()     
{ 

    //建立虛擬表
    DataColumn column1 = new DataColumn("test1", Type.GetType("System.String"));  
    DataColumn column2 = new DataColumn("test2", Type.GetType("
System.String")); DataColumn column3 = new DataColumn("test3", Type.GetType("System.String")); table.Columns.Add(column1); //將列新增到table表中 table.Columns.Add(column2); table.Columns.Add(column3); for (int i = 1; i <= 30000; i++) { DataRow dr = table.NewRow(); //table表建立行 dr["test1"] = "資產編號" + i.ToString(); dr["test2"] = "資產名稱" + i.ToString(); dr["test3"] = "規格型號" + i.ToString(); table.Rows.Add(dr); //將資料加入到table表中 } recordCount = table.Rows.Count; //記錄總行數 pageCount = (recordCount / pageSize); if ((recordCount % pageSize) > 0) { pageCount++; } //預設第一頁 currentPage = 1; LoadPage( );//呼叫載入資料的方法 }

第三步:進行載入顯示資料

/// <summary>
/// LoadPage方法
/// </summary>
private void LoadPage( )
{
    if (currentPage < 1) currentPage = 1;
    if (currentPage > pageCount) currentPage = pageCount;

    int beginRecord;    //開始指標
    int endRecord;      //結束指標
    DataTable dtTemp;
    dtTemp = table.Clone();

    beginRecord = pageSize * (currentPage - 1);
    if (currentPage == 1) beginRecord = 0;
    endRecord = pageSize * currentPage;

    if (currentPage == pageCount) endRecord = recordCount;
    for (int i = beginRecord; i < endRecord; i++)
    {
        dtTemp.ImportRow(table.Rows[i]);
    } 

    dataGridView1.Rows.Clear();

    for (int i = 0; i < dtTemp.Rows.Count; i++)
    { 
        dataGridView1.Rows.Add(new object[] { dtTemp.Rows[i][0] , dtTemp.Rows[i][1] , dtTemp.Rows[i][2] });
    } 

    labPageIndex.Text = "當前頁: " + currentPage.ToString() + " / " + pageCount.ToString();//當前頁
    labRecordCount.Text = "總行數: " + recordCount.ToString() + "";//總記錄數
}

第四步:設定按鈕點選事件

/// <summary>
/// 首頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFirst_Click(object sender, EventArgs e)
{
    if (currentPage == 1)
    { return; }
    currentPage = 1;
    LoadPage();
}
/// <summary>
/// 上一頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrev_Click(object sender, EventArgs e)
{
    if (currentPage == 1)
    { return; }
    currentPage--;
    LoadPage();
}
/// <summary>
/// 下一頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNext_Click(object sender, EventArgs e)
{
    if (currentPage == pageCount)
    { return; }
    currentPage++;
    LoadPage();
}
/// <summary>
/// 尾頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLast_Click(object sender, EventArgs e)
{
    if (currentPage == pageCount)
    { return; }
    currentPage = pageCount;
    LoadPage();
}

第五步:load事件載入時顯示資料

private void Form1_Load(object sender, EventArgs e)
{
    PageSorter();//分頁 
}

最終展示結果

最後附上原始碼地址

  連結: https://pan.baidu.com/s/1iJLHHef2p75xXMSlIbPVOw

  提取碼: sdh6