在做这个功能的时候在网上找了大量资料,发现都不适用,要不然就是代码太冗余,所以另起炉灶,自己封装了这个函数

下面是完整的代码:

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="easyui/themes/default/easyui.css"/>
<link rel="stylesheet" href="easyui/themes/icon.css"/>
<script src="easyui/jquery.min.js"></script>
<script src="easyui/jquery.easyui.min.js"></script>
<script src="easyui/locale/easyui-lang-zh_CN.js"></script>
</head>
<body>
<div id="tab1">
<table id="removeCell1">
<thead>
<tr>
<th data-options="field:'X',width:50,align:'center',sortable:true">X</th>
<th data-options="field:'Y',width:50,align:'center',sortable:true">Y</th>
<th data-options="field:'Z',width:50,align:'center',sortable:true">Z</th>
<th data-options="field:'IMSI',width:50,align:'center',sortable:true">A</th>
<th data-options="field:'Status',width:50,align:'center',sortable:true">B</th>
<th data-options="field:'Online',width:50,align:'center',sortable:true">C</th>
</tr>
</thead>
</table>
</div>
<div id="tab2">
<table id="removeCell2">
<thead>
<tr>
<th data-options="field:'X',width:50,align:'center',sortable:true">X</th>
<th data-options="field:'Y',width:50,align:'center',sortable:true">Y</th>
<th data-options="field:'Z',width:50,align:'center',sortable:true">Z</th>
<th data-options="field:'IMSI',width:50,align:'center',sortable:true">A</th>
<th data-options="field:'Status',width:50,align:'center',sortable:true">B</th>
<th data-options="field:'Online',width:50,align:'center',sortable:true">C</th>
</thead>
</table>
</div>
<script>
$("#removeCell1").datagrid({
rownumbers:true,
width:380,
height:300,
singleSelect:true,
multiSort:true,
remoteSort:true,
url:"query.json",
onLoadSuccess:function() {
remove("tab1");
}
})
$("#removeCell2").datagrid({
rownumbers:true,
width:380,
height:300,
singleSelect:true,
multiSort:true,
remoteSort:true,
url:"query.json",
onLoadSuccess:function() {
remove("tab2");
}
}) function remove(limit) {
var dom='.datagrid-header-inner .datagrid-cell';
var tbodyTr = $(".datagrid-view2 .datagrid-body .datagrid-btable tbody tr");
if(limit){
dom='#'+limit+' .datagrid-header-inner .datagrid-cell';
tbodyTr = $("#"+limit+" .datagrid-view2 .datagrid-body .datagrid-btable tbody tr");
}
$(dom).draggable({
revert: true,
proxy: 'clone'
}).droppable({
accept: dom,
onDrop: function (e, source) {
var destination=$(e.currentTarget).parent().index();
var start=$(source).parent().index();
if(destination<start){
$(source).parent().insertBefore($(e.currentTarget).parent());
}else{
$(source).parent().insertAfter($(e.currentTarget).parent());
}
for(var i=0;i<tbodyTr.length;i++){
var cell1=$(tbodyTr[i]).find("td")[destination];
var cell2=$(tbodyTr[i]).find("td")[start];
if(destination<start){
$(cell2).insertBefore($(cell1));
}else{
$(cell2).insertAfter($(cell1));
}
}
}
});
}
</script>
</body>
</html>

我定义了两个table,table外部必须包裹有唯一id的div,这是要保证两个table之间的操作互不影响.

主要实现功能的就是remove()这个函数,里面传入的参数是table外面div的ID,这样可以区分两个table的操作。

如果你的页面只有一个table的话不传参数也是可以的,也可以把limit参数相关的代码删除.

remove()函数需要在datagrid数据加载完成后调用,否则拖动时只有列头改变.

缺点:

这个函数虽然解决了列表拖动的问题,同时也产生了新的问题--------单击排序

当鼠标放到列头时会变成可拖动的标识,这时排序就没用了吗?当然不是,虽然单击时有影响,但是我发现双击还是有用的哦!

如果你对这个缺点不能容忍的话,欢迎提出新的解决方案.

请尊重别人的劳动成果,转载务必标明出处!

datagrid拖动列头更换排列顺序的更多相关文章

  1. WPF 用 DataTemplate 合并DataGrid列表列头<类似报表设计>及行头列头样式 - 学习

    WPF中 DataGrid 列头合并,类似于报表设计.效果图如下↓ 1.新建一个WPF项目WpfApplication1,新建一个窗体DataGridTest,前台代码如下: <Window x ...

  2. datatable 修改点击列头进行排序顺序

    一般点击排序时,是先升序后降序 可以通过如下代码修改排序规则 jQuery(function ($) { $(".datatable").dataTable({ "pag ...

  3. 实现在easyui中的datagrid,点击某一列的列头弹出combobox下拉框

    easyUI  datagrid在列头加下拉框,实现对列内容的筛选. 代码: onLoadSuccess: function (data) {//Fires when data is loaded s ...

  4. Easyui datagrid 数据表格 表格列头右键菜单选择展示列 JS

    Easyui ,数据表格加载出来以后,在表格头右键,会有显示筛选的功能: 如图: 然后可以取消勾选,就变成下面这个样子: 功能的实现是通过重写了easyui 的 $.fn.datagrid.defau ...

  5. DataGridView使用技巧七:列顺序的调整、操作行头列头的标题

    一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...

  6. datagrid 绑定选中数据,列头全选

    成品图: xaml代码 <Grid> <DataGrid x:Name="datagrid" Height="Auto" Width=&quo ...

  7. MFC listcontrol 分列 添加行数据 点击列头排序

    适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...

  8. WPF DataGrid某列使用多绑定后该列排序失效,列上加入 SortMemberPath 设置即可.

    WPF DataGrid某列使用多绑定后该列排序失效 2011-07-14 10:59hdongq | 浏览 1031 次  悬赏:20 在wpf的datagrid中某一列使用了多绑定,但是该列排序失 ...

  9. Asp.net的DataGrid实现列冻结(C#)

    # Asp.net的DataGrid实现列冻结(C#) 一.写在前面 列冻结即在拖动横向滚动条时,冻结的列会随着滚动条移动,使得该列不会因为拖动滚动条而被隐藏,呈现出仿佛冻结的效果.列冻结与表头冻结是 ...

随机推荐

  1. 白话Redis分布式锁

    redis分布式 简单来说就是,操作redis实例时,不是常规(单机)操作一个实例,而是操作两台或多台,也就是基于分布式集群: 而且redis内部是单进程.单线程,是数据安全的(只有自己的线程在操作数 ...

  2. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

  3. PHP memcache的使用教程

    (结尾附:完整版资源下载) 首先,为什么要用memcached?如果你看过InnoDB的一些书籍,你应该知道在存储引擎那一层是由一个内存池的.而在内存池中 又有一个缓冲池.而缓冲池就会缓冲查找的数据, ...

  4. tomcat 介绍

    Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发 ...

  5. WireShark告诉你ping百度时都发生了什么

    备注:  测试机器为Mac 重点展示本机发出icmp的过程(dns-->arp-->icmp) 本机默认网关 ->route -n get e -n get default rout ...

  6. BioinfomaticsPPT-1-Introduction

    1.人类基因基础  2.基因组规模 3.基因分化表达 4.遗传信息流 5.基因基础知识相关 6.遗传编码 7.序列比对的意义 8.

  7. Hbase 学习笔记2----概念

    说在前面,本文部分内容来源于社区官网经过适度翻译,部分根据经验总结,部分是抄袭网络博文,(不一一列举引用,在此致歉)一并列在一起,本文的目的,希望能总结出一些有用的,应该注意到的东西,基本思路是先提出 ...

  8. 初识JS 基本语法.基本运算符

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...

  9. python入门四:异常

    一.异常 异常就是在触发异常条件时(解释器或程序员)而采取相应的措施 c++中异常使用try, throw, catch等关键字,而python中使用try, raise, except等 二.标准异 ...

  10. hadoop22---wait,notify

    vv wait和notify,是要加syschronized的,是要获取锁的,wait是释放控制权,别的线程就可以执行了,notify和notifyall是通知其他线程执行.