利用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 相关文章推荐
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
ASP.NET中AJAX 调用实例代码
May 03 Javascript
js里取容器大小、定位、距离等属性搜集整理
Aug 19 Javascript
javascript中的window.location.search方法简介
Sep 02 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
Jan 04 Javascript
Webwork 实现文件上传下载代码详解
Feb 02 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
解决layui中的form表单与button的点击事件冲突问题
Aug 15 Javascript
web页面和微信小程序页面实现瀑布流效果
Sep 26 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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
PHP数组相关函数汇总
2015/03/24 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
python绘制高斯曲线
2021/02/19 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
求职简历中自我评价
2014/01/28 职场文书
工作自我评价怎么写
2014/01/29 职场文书
党员十八大心得体会
2014/09/12 职场文书
送达通知书
2015/04/25 职场文书
法定代表人身份证明书
2015/06/18 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android