利用jqgrid实现上移下移单元格功能


Posted in Javascript onNovember 07, 2018

前言

JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信。

在表格中常常需要调整表格中数据的显示顺序,我用的是jqgrid,实现原理就是将表中的行数保存到数据库中,取数据时按行进行排序

下面话不多说了,来一起看看详细的介绍吧

jqgrid上移下移单元格

1、上移,下移按钮

<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" onclick="operateWithOneRowById(up)" class="linkButton">上移</a>
 <a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" onclick="operateWithOneRowById(down)" class="linkButton">下移</a>

2、上移下移 功能

function operateWithOneRowById(callback) {
   var selected = tableObj.jqGrid('getGridParam', 'selrow');
   if (selected == null) {
    alert("请用鼠标点击选择一行后再执行操作!");
    return;
   }
   return callback(selected);
  }

3、这里的callback是up和down 函数的合并,那么我们再看看这两个函数

function up(selected) {
   if (selected == 1) return;
   else {
    gridHelper.moveRow("up", tableObj);
   }
  }

  function down(selected) {
   gridHelper.moveRow("down", tableObj);
  }

4、在这个函数中,我们都调用了一个函数movRow() 让我们来看看这个函数,这个函数的原理就是把当前选中的行和我要移到至的行进行交换就行了。

//移动一行
 this.moveRow = function(moveMethod, grid) {
  if (grid) tableObj = grid;
  var id;
  // if(selRow) id=selRow;
  // else id = getSelRow();
  id = this.getSelRow();
  tableObj.restoreRow(id);
  if (id == null) return;
  var targetId = this.getTargetId(id, moveMethod)
  if (targetId == -1) return;

  var temp1 = tableObj.getRowData(id);
  var temp2 = tableObj.getRowData(targetId);
  //对调行号
  var tempRn = temp1.rn;
  temp1.rn = temp2.rn;
  temp2.rn = tempRn;
  //对调数据
  tableObj.setRowData(id, temp2);
  tableObj.setRowData(targetId, temp1);
  tableObj.setSelection(targetId);
 }

5、在4中调用了getTargetId()方法,我们再来看看这个方法

//取得上移时的上一行的id,或下移时的下一行的id
 this.getTargetId = function(selId, method, grid) {
  if (grid) tableObj = grid;
  var ids = tableObj.getDataIDs();
  for (var i = 0; i < ids.length; i++) {
   if (selId == ids[i] && method == "up") {
    if (i == 0) return -1;
    else return ids[i - 1];
   }
   if (selId == ids[i] && method == "down") {
    if (i == ids.length - 1) return -1;
    else return ids[i + 1];
   }
  }
 }

6、增加数据库字段Sequence  我用的nhibernate 还要在配置文件中进行修改,增加一行<property name="Order" column="Sequence"></property>  实体类中增加字段 order,在保存表时保存表中的行号

保存数据说明:保存时是保存表中的所有数据,有已经在数据库中的数据,有没有存在数据库中的数据,根据IDj是否为0来判断的。

public void UpdatePlan(PlanToReport plan, List<PlanPerson> list)
  {
   NHibernate.ISession session = NHibernateSessionManager.Instance.GetSession();
   try
   {
    PlanToReportService.UpdatePlan(plan);
    for (int i = 0; i < list.Count; i++)
    {
     PlanPerson item = list[i];
     if (item.ID != 0)
     {
      PlanPerson itemnew = PlanToReportService.GetPlanPersonById(item.ID);
      itemnew.JobName = item.JobName;
      itemnew.ApprovalResults = item.ApprovalResults;
      itemnew.Attachments = item.Attachments;
      itemnew.CountryCode = item.CountryCode;
      itemnew.CountryName = item.CountryName;
      itemnew.MissionType = item.MissionType;
      itemnew.Position = item.Position;
      itemnew.Remark = item.Remark;
      itemnew.StartDate = item.StartDate;
      itemnew.Status = item.Status;
      itemnew.Explain = item.Explain;
      itemnew.Order = i;
      PlanToReportService.AddNewPlanPerson(itemnew);
     }
     else
     {
      item.PlanID = plan.ID;
      item.Order = i;
      PlanToReportService.AddNewPlanPerson(item);
     }
      
    }
    session.Transaction.Commit();
   }
   catch (Exception ep)
   {
    session.Transaction.Rollback();
    throw ep;
   }
  }

7、取数据时根据 Order 字段进行排序

public List<PlanPersonShowInGrid> GetShowPersonInPlan(int planID)
  {
   ISession session = NHibernateSessionManager.Instance.GetSession();
   ICriteria criteria = session.CreateCriteria(typeof(PlanPersonShowInGrid));
   criteria.Add(Expression.Eq("PlanID", planID)).AddOrder(Order.Asc("Order"));
   List<PlanPersonShowInGrid> list = new List<PlanPersonShowInGrid>();
   try
   {
    IList l = criteria.List();
    list = PlanToReportDao.IListToList<PlanPersonShowInGrid>(l);
   }
   catch { }
   return list;
  }

至此,表格中数据的上移下移就完成了。

总结:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript XML和string相互转化实现代码
Jul 04 Javascript
javaScript如何生成xmlhttp
Dec 16 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
Aug 18 Javascript
五种js判断是否为整数类型方式
Dec 03 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
May 30 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
解决layer 动态加载select 失效的问题
Sep 18 Javascript
使用layer弹窗,制作编辑User信息页面的方法
Sep 27 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 Javascript
浅析vue中的nextTick
Dec 28 Vue.js
JS+JQuery实现无缝连接轮播图
Dec 30 jQuery
React 源码中的依赖注入方法
Nov 07 #Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 #Javascript
详解react native页面间传递数据的几种方式
Nov 07 #Javascript
微信小程序使用npm支持踩坑
Nov 07 #Javascript
Angular Material Icon使用详解
Nov 07 #Javascript
详解Webpack loader 之 file-loader
Nov 07 #Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 #Javascript
You might like
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
Python写入CSV文件的方法
2015/07/08 Python
Python模拟三级菜单效果
2017/09/11 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Python实现登陆文件验证方法
2018/10/06 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
求职简历自荐信范文
2013/10/21 职场文书
人事专员职责
2014/02/22 职场文书
药店促销活动总结
2014/07/10 职场文书
2014年宣传工作总结
2014/11/18 职场文书
北京导游词
2015/02/12 职场文书
工作能力自我评价2015
2015/03/05 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript