datatable 如何分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datatable 如何分页相关的知识,希望对你有一定的参考价值。

public DataTable DemandDt = new DataTable("DemandDt");
#region 数据绑定
private void BindUserData()


SupplyDt.Columns.Add(new DataColumn("id", typeof(Int32)));
SupplyDt.Columns.Add(new DataColumn("type", typeof(string)));
SupplyDt.Columns.Add(new DataColumn("information", typeof(string)));

DataRow Newrow;
int i = 0;
QueryParam qp = new QueryParam();

qp.Where = "Where type='供'";
List<sdinformationEntity> sd = BusinessFacadeHQAgricultureClass.sdinformationList(qp, out i);

try


foreach (sdinformationEntity sdinformation in sd)


Newrow = SupplyDt.NewRow();//新行必须在循环内 不然会覆盖数据…………

Newrow["id"] = sdinformation.ID;
Newrow["type"] = sdinformation.Type;
Newrow["information"] = sdinformation.Information;
SupplyDt.Rows.Add(Newrow);



this.DataGrid1.DataSource = SupplyDt;
this.DataGrid1.DataBind();

catch (Exception ee)

Response.Write(ee.Message); //如果有错误,输出错误信息



#endregion

前台有linkbutton 上一页 下一页

具体怎么做 谢谢

private int PAGE_SIZE = 20;//测试用,每页20条记录.

记录当前页:

public void test()

int currentPage=2;//当前页为第2页
int start=currentPage*PAGE_SIZE+1;//当前页超始记录号
string sql="spGetCustomerData 0,1";

sql=string.format(sql,start,PAGE_SIZE); //调用存贮过程获取数据

//get data ,do it youself...


存储过程:

create procedure spGetCustomerData
@start int,
@page_size int
as
begin
declare @sql varchar(3000)
set @sql='select top '+cast(@start as varchar) + ' * from customers where customerid
not in ( select top '+cast(@start-1 as varchar) + ' customerid from customers )'
exec(@sql)
end



顺手写的,自己去调式. 网页上的分页多数是这么写的。
参考技术A

DataTable分页代码如下:

/// <summary>
        /// 根据索引和pagesize返回记录
        /// </summary>
        /// <param name="dt">记录集 DataTable</param>
        /// <param name="PageIndex">当前页</param>
        /// <param name="pagesize">一页的记录数</param>
        /// <returns></returns>
        public static DataTable SplitDataTable(DataTable dt, int PageIndex, int PageSize)
        
            if (PageIndex == 0)
                return dt;
            DataTable newdt = dt.Clone();
            //newdt.Clear();
            int rowbegin = (PageIndex - 1) * PageSize;
            int rowend = PageIndex * PageSize;

            if (rowbegin >= dt.Rows.Count)
                return newdt;

            if (rowend > dt.Rows.Count)
                rowend = dt.Rows.Count;
            for (int i = rowbegin; i <= rowend - 1; i++)
            
                DataRow newdr = newdt.NewRow();
                DataRow dr = dt.Rows[i];
                foreach (DataColumn column in dt.Columns)
                
                    newdr[column.ColumnName] = dr[column.ColumnName];
                
                newdt.Rows.Add(newdr);
            

            return newdt;
        

如何更改 DataTables jQuery 插件的分页按钮数量

【中文标题】如何更改 DataTables jQuery 插件的分页按钮数量【英文标题】:How to change the number of pagination buttons of the DataTables jQuery plugin 【发布时间】:2014-08-14 13:10:13 【问题描述】:

默认情况下,DataTables 插件显示 7 个分页按钮(包括省略号) 喜欢

上一个 1 2 3 4 5 ... 10 下一个

我希望能够将其更改为较小的数字,例如

上一个 1 ... 10 下一个

我在文档中的任何地方都找不到这个。

我找到了this plugin,但它说这是已弃用,而且

DataTables 1.10 内置了这种能力。

但它没有显示在哪里进行更改。

【问题讨论】:

你会考虑php分页吗? 分页数据在php中完成的,问题是关于插件创建的界面 【参考方案1】:

我在摆弄DataTable javascript 对象和DataTables' 源代码后终于找到了它。

你必须添加这一行(在初始化之前或之后)

$.fn.DataTable.ext.pager.numbers_length = 3;

注意这会显示为

上一个 1 ... 10 下一个

而不是

上一个 1 2 ... 10 下一个

所以请务必在长度编号中包含省略号。

编辑:

在浏览页面时,我发现此解决方案存在一些问题。

我不得不像这样重写他们的_numbers 函数:

function _numbers(page, pages) 
    var
        numbers = [],
        buttons = 5, // added here the number of buttons
        half = Math.floor(buttons / 2);

    if(pages <= buttons) 
        numbers = _range(0, pages);
     else if(page <= half) 
        numbers = _range(0, buttons - 2);

        numbers.push("ellipsis");
        numbers.push(pages - 1);
     else if(page >= pages - 1 - half) 
        numbers = _range(pages - (buttons - 2), pages);

        numbers.splice(0, 0, "ellipsis");
        numbers.splice(0, 0, 0);
     else 
        numbers.push(page); // changed this from _range(page - 1, page + 2);
        numbers.push("ellipsis");
        numbers.push(pages - 1);
        numbers.splice(0, 0, "ellipsis");
        numbers.splice(0, 0, 0);
    

    numbers.DT_el = "span";

    return numbers;

并用它来向我自己的函数指出DataTables

$.fn.DataTable.ext.pager.simple_numbers = function(page, pages) 
    return ["previous", _numbers(page, pages), "next"];
;

另外,我必须将他们的 _range 函数复制到我的 main.js 文件中。

【讨论】:

如何在我的数据表函数中使用它..在哪里应用这个函数..请告诉我..谢谢 我离开了Web开发,但答案很清楚,只要把它放在你的主js文件中。 感谢您回复“Iulian Onofrei”。但这仅适用于第一次加载数据。如果我们点击页号。分页重置为相同的默认值.. @ShrikantBhardwaj,我不再使用这个,所以我帮不了你。 没关系。我在分页中使用了输入类型。并感谢您的回复【参考方案2】:

显然,DataTableJS 的理想最小值是:

$.fn.DataTable.ext.pager.numbers_length = 5;

【讨论】:

【参考方案3】:

与https://www.gyrocode.com/articles/jquery-datatables-pagination-without-ellipses/结合设置

在脚本加载后添加以下内容

<script>
    $.fn.DataTable.ext.pager.numbers_length = 3;
    $.fn.DataTable.ext.pager.full_numbers_no_ellipses = function (e, r)  var a = [], n = $.fn.DataTable.ext.pager.numbers_length, t = Math.floor(n / 2), l = function (e, r)  var a; void 0 === r ? (r = 0, a = e) : (a = r, r = e); for (var n = [], t = r; t < a; t++)n.push(t); return n ; return (a = r <= n ? l(0, r) : e <= t ? l(0, n) : e >= r - 1 - t ? l(r - n, r) : l(e - t, e + t + 1)).DT_el = "span", ["first", "previous", a, "next", "last"] ;
</script>

【讨论】:

以上是关于datatable 如何分页的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ngx-datatable 实现服务端分页+服务端排序

如何使用 Datatable 以 POST 类型传递请求正文数据以使用 Javascript 进行服务器端分页

如何在 Jquery Datatable 分页锚元素上添加额外的类?

如何在 Angular 8 中保存表格的分页、排序、搜索状态?我正在使用 angular2-datatable

DataTable分页

Jquery DataTable 删除分页