datagrid分页中如果删除时出现超出索引

本文介绍了一个具体的页面跳转逻辑实现,详细解释了如何根据不同情况调整当前页码,确保用户在进行增删操作后能停留在合适的页面。涉及条件判断、余数运算等关键步骤。
public void jumppage(System.Web.UI.WebControls.DataGrid dg)
{
int int_PageLess; //定义页面跳转的页数
//如果当前页是最后一页
if(dg.CurrentPageIndex == dg.PageCount-1)
{
//如果就只有一页
if(dg.CurrentPageIndex == 0)
{
//删除后页面停在当前页
dg.CurrentPageIndex = dg.PageCount-1;
}
else
{
//如果最后一页只有一条记录
if((dg.Items.Count % dg.PageSize == 1) || dg.PageSize == 1)
{
//把最后一页最后一条记录删除后,页面应跳转到前一页
int_PageLess = 2;
}
else //如果最后一页的记录数大于1,那么在最后一页删除记录后仍然停在当前页
{
int_PageLess = 1;
}
dg.CurrentPageIndex = dg.PageCount - int_PageLess;
}
}
}
 
var toolbar = [{ text:'删除', iconCls:'icon-cut', handler:function(){ var rows = $('#table-m1').datagrid('getSelections'); for (let i = 0; i < rows.length; i++) { var row = rows[i]; var index = $('#table-m1').datagrid('getRowIndex',row); var originalRows = $('#table-m1').datagrid('getData').originalRows; $('#table-m1').datagrid('deleteRow',index) originalRows = originalRows.filter(function (item) { return item.id !== row.id; }) $('#table-m1').data('datagrid').originalRows = null; $('#table-m1').datagrid('loadData',originalRows) } } },]; var options = { tableName: "orderCustomInvoice",//表名 toolbar:toolbar,//工具栏 columns: cols,//列 data: [], pagination: true,//是否使用分页 pageSize:25, pageList: [25,50,100,150], nowrap : true,//设置为true,当数据长度超出列宽将会自动截取 striped : true,//设置为true将交替显示行背景。 collapsible : true,//显示可折叠按钮 fitColumns:true,//允许表格自动缩放,以适应父容器 rownumbers:true, remoteSort: false,//排序必填(是否在后端排序的基础上排序) sortOrder: 'asc,asc',//排序方式 sortName: "sap_sn,order_seq",//排序字段 multiSort: true,//定义是否启用多列排序 loadFilter:pagerFilter, callback: function (data) {//回调, } }; //初始化列表 initEasyUiTable('#table-m1', options); //客户端分页,美化明细表 function pagerFilter(data){ if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array data = { total: data.length, rows: data } } //这个函数为每次表格加载数据的过滤函数,data中包含原始数据,返回的是真正要显示出来的数据 //获取Datagrid对象 var dg = $(this); //获取选项对象,此处该对象用于保存分页的相关信息 var opts = dg.datagrid('options'); //获取分页器 var pager = dg.datagrid('getPager'); //重写表格所使用分页器的onSelectPage方法,此方法在用户选择新的页面触发,即改变pageNum或pageSize触发 //此处真正的翻页逻辑并不在onSelectPage方法里面,可以看到在该方法中仅仅是将新页面的参数(pageNum, pageSize)保存在opts对象中, //这两个参数在后面的代码中被使用 pager.pagination({ onSelectPage:function(pageNum, pageSize){ opts.pageNumber = pageNum; opts.pageSize = pageSize; //下面注释的代码我暂不明白有什么作用,没有他们分页功能仍然能够正确实现 // pager.pagination('refresh',{ // pageNumber:pageNum, // pageSize:pageSize // }); //此处loadData方法会加载本地数据,即data中的数据,data中包含有初次加载的所有数据 dg.datagrid('loadData',data); //上述方法执行会被pagerFilter拦截到,并对初始数据进行筛选,以达到分页的效果 }, layout:['list','sep','first','prev','sep','links','sep','next','last','sep','refresh'] }); //真正的分页逻辑 //第一次进入pagerFilter函数,data中只有rows中保存了数据,并无originalRows属性,实现客户端分页,需要在一开始将这些数据保存在 //originalRows中,成为后续分页的基础数据,所以只要originalRows属性存在且不为空,分页的基础数据便一直是originalRows中保存的数据 if(!data.originalRows){ data.originalRows =(data.rows); } //取出选择新的页面,新页面的参数,前面已经保存在opts对象中了 var start =(opts.pageNumber-1)*parseInt(opts.pageSize); var end = start + parseInt(opts.pageSize); //下面对初始数据进行筛选,并将结果放在data.rows中,页面每次加载只会显示data.rows中的数据 data.rows =(data.originalRows.slice(start, end)); //返回data,完成分页 data.content = (data.originalRows.slice(start, end)); data.pageable = {"pageNumber":opts.pageNumber,"pageSize":opts.pageSize,"searchCount":false}; data.pageNumber = opts.pageNumber; data.pageSize = opts.pageSize; data.totalPages = Math.ceil(data.total / data.pageSize); // console.log(data); return data; }
08-07
基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值