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

时间:2015-06-24 12:19:47

标签: c# winforms datagridview

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

1 个答案:

答案 0 :(得分:0)

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

有关分页的更全面的示例,请参阅Sk Saini的代码项目文章A Simple Way for Paging in DataGridView in WinForm Applications,我从中获得了大量此答案。

因此,使用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
  }
}