在表格中常常需要调整表格中数据的显示顺序,我用的是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. C# 由范式编程==运算符引发对string内存分配的思考

    今天在看C#编程指南时(类型参数的约束http://msdn.microsoft.com/zh-cn/library/d5x73970.aspx)看到一段描述: 在应用 where T : class ...

  2. rsync 备份服务搭建(完成)

    rsync服务守护进程 服务器端配置过程: 1. 检查rsync是否安装: rpm -qa rsync 2.添加rsync服务的用户,管理本地目录 useradd-s /sbin/nologin -M ...

  3. 316. Remove Duplicate Letters (accumulate -> count of the difference elements in a vector)

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  4. 浅谈 cxx rope

    一般说的浅谈是永远不会短的 然后$qwq$本宝宝并不想讲实现原理 会用就行了呗 然后方便起见,本文规定数组$a$的第$1$位为$a[0]$ 并且本文的所有$debug$为了方便看到我们$rope$长度 ...

  5. OC - runtime 之关联对象

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  6. centos7用docker安装单节点redis4.0.11

    [root@localhost conf]# docker search redisINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDdocker.io d ...

  7. Unity---动画系统学习(1)---在状态机中简单控制物体运动

    1. 介绍 新建一个GameObject-Cube,在Window下添加Animation(快捷键ctrl+6).会添加用于播放动画的三个东西.物体上的Animator组件.Animator Cont ...

  8. Jenkins持续集成企业实战系列之Jenkins插件下载及邮件配置-----05

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  9. Ntrip协议使用流程及服务器实现架构

    Ntrip协议 在RTK接收机中,有多种方式获取到差分数据:电台.挂外串口.网络等.其中网络方式适合在有网络基准站的地区,省掉携带多一台RTK接收机来完成工作. CORS是网络基准站,通过网络收发GP ...

  10. 5、用Numpy实现结构体

    1.结构数组: 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组.和C语言一样,在NumPy中也很容易 ...