如何在手动添加列时在datagridview中进行分页

本文关键字:datagridview 分页 添加 | 更新日期: 2023-09-27 17:59:18

我想在datagridview中进行分页,有很多方法,但它们都是用于if直接绑定数据库中的数据。当我们手动添加列时,有人能告诉我们如何进行分页吗?

如何在手动添加列时在datagridview中进行分页

要添加分页,您需要知道来自数据的总行数,然后将这些行拆分为页面,并填充datagridview的数据源,然后您就可以处理列的显示方式。

有关分页的更完整示例,请参阅Sk Saini的代码项目文章《WinForm应用程序中DataGridView中的分页的简单方法》,我在这篇文章中给出了很多答案

因此,以BindlingList为例,并记住这是一个不完整的解决方案。

private int pageSize = 10;
private int currentPage = 0;
private int totalPages;
private BindlingList<object> bindinglist;
public void InitialiseDataSource(){
    // populate bindinglist..
    bindinglist = new Bindlist<object>(){etc..}
    CalculateTotalPages();
    SetDataSource(1);
}
private void CalculateTotalPages(){
    int rowCount = bindingList.Count;
    this.totalPages = rowCount / this.pageSize;
    if (rowCount % this.pageSize > 0){
       this.totalPage += 1;
    }
}
private int GetNumOfItemsToShow(int page){
    return this.pageSize * this.page;
}
private int GetNumOfItemsToSkip(){
    return this.pageSize * this.currentPage;
}

如果您使用其他类型的数据源,这种方法会有所不同,但对于我们的BindingList,请计算出要跳过的项目数和要显示的项目数:

private void SetDataSource(int page){
    var itemsToSkip = GetNumOfItemsToSkip();
    var itemsToShow = GetNumOfItemsToShow(page);
    var listToShow = bindingList.Skip(itemsToSkip).Take(itemsToShow);
    this.currentPage = page;
    dataGridView1.DataSource =  listToShow;
}

然后在页面之间移动页面,添加NextPage、PreviousPage等方法。

private void NextPage(){
  var page = currentPage + 1;
  if (page <= totalPages){
      SetDataSource(page);   
  } else {
      //do something else
  }
}