从Total和PerPage值确定页数

时间:2009-07-06 19:42:11

标签: c# pagination

确定您提供了多少页数据的最优雅方式(在C#中):

a。)总记录 b。)每页记录。

目前我的工作正在进行,但它使用if / else来检查该值是否超过总数(1页)或更多,然后必须截断小数位,执行mod操作并添加1以下有一个尾随的小数。

我确信有一个Math函数可以为我做很多这样的事情并且不那么难看。

感谢。

4 个答案:

答案 0 :(得分:21)

int pages = ((totalRecords-1) / recordsPerPage)+1

假设totalRecordsrecordsPerPage是整数。如果它们是双打的(为什么它们会加倍?)你需要首先将它们转换为int或long,因为这依赖于整数除法。

将其包装在一个函数中,这样您就不必在代码库中的任何地方重复计算。只需在以下函数中设置一次:

public int countPages(int totalRecords, int recordsPerPage) {
  return ((totalRecords-1) / recordsPerPage)+1;
}

如果totalRecords可以为零,您只需在函数中轻松添加一个特殊情况:

public int countPages(int totalRecords, int recordsPerPage) {
  if (totalRecords == 0) { return 1; }
  return ((totalRecords-1) / recordsPerPage)+1;
}

答案 1 :(得分:0)

int pages = 1 + (totalRecords + 1) / (recordsPerPage + 1)

答案 2 :(得分:0)

这种方法存在问题:

public int countPages(int totalRecords, int recordsPerPage) {  
    if (totalRecords == 0) { return 1; }  return ((totalRecords-1) / recordsPerPage)+1;
}

如果totalRecords为1,则除以0.需要额外的if语句。

这是我的重写。当int返回时没有结果时,.NET倾向于使用-1。所以重用这个约定。

public int countPages(int totalRecords, int recordsPerPage)
{ 

//insert as many paranthesies and tabs as makes you happy.
if(totalRecords == 0) return -1;
return (totalRecords % recordsPerPage) == 0? 
(totalRecords/recordsPerPage) 
: (totalRecords/recordsPerPage) + 1; 

}

答案 3 :(得分:-1)

int totalPages = (int)Math.Ceiling((double)totalRecords/recordsPerPage);