利用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 相关文章推荐
js 使FORM表单的所有元素不可编辑的示例代码
Oct 17 Javascript
2014最热门的JavaScript代码高亮插件推荐
Nov 25 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
详解vue模拟加载更多功能(数据追加)
Jun 23 Javascript
详解React中的组件通信问题
Jul 31 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
js实现内置计时器
Dec 16 Javascript
简单了解常用的JavaScript 库
Jul 16 Javascript
JS Object构造函数之Object.freeze
Apr 28 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
Protoss魔法科技
2020/03/14 星际争霸
松下Panasonic RF-B65电路分析
2021/03/02 无线电
php文件上传你必须知道的几点
2015/10/20 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
JS解密入门 最终变量劫持
2008/06/25 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python访问sqlserver示例
2014/02/10 Python
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python3.x上post发送json数据
2018/03/04 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
实习生自我评价
2014/01/18 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
Node.js实现断点续传
2021/06/23 Javascript
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
Golang Web 框架Iris安装部署
2022/08/14 Python