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