利用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 相关文章推荐
JQuery 常用方法基础教程
Feb 06 Javascript
javascript入门基础之私有变量
Feb 23 Javascript
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
jQuery操作input值的各种方法总结
Nov 21 Javascript
JS实现的不规则TAB选项卡效果代码
Sep 18 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
Jan 04 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
Oct 12 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
Iview Table组件中各种组件扩展的使用
Oct 20 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 Javascript
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基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
python 切片和range()用法说明
2013/03/24 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
绘画设计学生的个人自我评价
2013/09/20 职场文书
村级换届选举方案
2014/05/10 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
交通安全温馨提示语
2015/07/14 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
pandas求平均数和中位数的方法实例
2021/08/04 Python
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript