利用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 类型转换方法
Oct 24 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
jQuery 复合选择器应用的几个例子
Sep 11 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
Mar 24 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
Mar 29 Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 Javascript
jquery实现手风琴案例
May 04 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
PHP性能优化 产生高度优化代码
2011/07/22 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
Python将多个excel文件合并为一个文件
2018/01/03 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python基于opencv检测程序运行效率
2019/12/28 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
is_file和file_exists效率比较
2021/03/14 PHP
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
编辑找工作求职信范文
2013/12/16 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
捐书活动倡议书
2015/04/27 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery