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

1、上移,下移按钮

 <a href="javascript:void(0)" onclick="operateWithOneRowById(up)" class="linkButton">上移</a>
<a href="javascript:void(0)" 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 == ) 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 == -) 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 = ; i < ids.length; i++) {
if (selId == ids[i] && method == "up") {
if (i == ) return -;
else return ids[i - ];
}
if (selId == ids[i] && method == "down") {
if (i == ids.length - ) return -;
else return ids[i + ];
}
}
}

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 = ; i < list.Count; i++)
{
PlanPerson item = list[i];
if (item.ID != )
{
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;
}

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

jqgrid 上移下移单元格的更多相关文章

  1. jqgrid cellEdit为true的时候,默认选中单元格值的解决方案

    jqgrid cellEdit为true的时候,点击单元格的时候,鼠标在单元格最前面闪. 这时候如果要修改数字内容,非常麻烦.要全选单元格内容,不然不好改. 点击单元格的时候,默认选中单元格值的解决方 ...

  2. JQ完成表格单元格顺序的上移下调

    如有指教及疑问,欢迎留言 HTML代码 <table class="exampletable"> <thead> <tr> <th> ...

  3. jqgrid 设置单元格编辑/不可编辑

    首先设置不可编辑,如下代码: $(', 'not-editable-cell'); 在单元格上设置一个'not-editable-cell'就可以了,如果需要设置为可编辑,那么可以使用下面的代码: f ...

  4. jqgrid单元格设置空值的方法

    项目中使用jqgrid,在使用的场景下经常需要清空单元格内容,于是使用了下面的代码: $("#jqgrid1").jqGrid('setCell',rowId, 'column', ...

  5. jqgrid设置单元格数据

    $("#gridid").jqGrid('setCell',rowid,icol,data); rowid为行ID,jqgrid内置的那个,从1开始 icol为列索引,从0开始, ...

  6. jqGrid合并单元格

    两个参数 /**合并单元格:合并指定 gridName表格的NoName 列,合并的标准是参考CellName+CellNameTwo列内单元格的值. * gridName :表格名称 * NoNam ...

  7. jqGrid 清空单元格的方法

    在工作中,使用到jqGrid的场景是比较多的. 今天在工作中遇到了一个jqGrid的问题,当将单元格的值设置成 '' 空字符串的时候,竟然不会修改成功. $("#mygrid"). ...

  8. jqgrid单元格合并

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  9. jqGrid单元格编辑配置,事件及方法

    转自 http://blog.csdn.net/xueshijun666/article/details/18151055 // var ret = $("#in_store_list_de ...

随机推荐

  1. ORB SLAM2 学习笔记

    cd ~/Documents/demos/ORB_SLAM2 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.y ...

  2. spark执行例子eclipse maven打包jar

    首先在eclipse Java EE中新建一个Maven project具体选项如下 点击Finish创建成功,接下来把默认的jdk1.5改成jdk1.8 然后编辑pom.xml加入spark-cor ...

  3. linux系统安全及应用——端口扫描

    NMAP是一款强大的网络扫描安全监测工具,通过扫描网络中不需要的服务端口来关闭这些服务,提高安全性.官网是http://nmap.org/,linux安装光盘中自带软件nmap-5.51.3.el6. ...

  4. app.use和app.get的区别及解析

    转载至:http://blog.csdn.net/wthfeng/article/details/53366169 写在前面:最近研究nodejs及其web框架express,对app.use和app ...

  5. POJ1358 Agri-Net

    题目链接 就是裸的最小生成树,复习一下. prim算法: G=(V,E),V是点集,E是边集 假设T=(U,TE)是最小生成树.U,TE初始化为空 首先从V中任取一点 假设取V1,然后U={V1},只 ...

  6. celery实现异步任务

    celery==3.1.25 rabbitmq开启服务 tasks.py代码如下: from celery import Celery broker = 'amqp://guest:guest@loc ...

  7. 原生JS实现返回顶部和滚动锚点

    ;(function (window,doc,undefined) { function rollingAnchor(){ this.timer =''; } rollingAnchor.protot ...

  8. Android Studio 常用应用

    1.在控制台的Logcat中输出测试语句 package com.example.lucky.helloworld; import android.support.v7.app.AppCompatAc ...

  9. nginx 之 proxy_pass

    nginx中有两个模块都有proxy_pass指令 ngx_http_proxy_module的proxy_pass 语法: proxy_pass URL; 场景: location, if in l ...

  10. 洛谷 P3267 [JLOI2016/SHOI2016]侦察守卫(树形dp)

    题面 luogu 题解 树形\(dp\) \(f[x][y]表示x的y层以下的所有点都已经覆盖完,还需要覆盖上面的y层的最小代价.\) \(g[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上 ...