代码有点多,因为我在实现的时候遇到了很多问题,就一直添加代码修改,如果你没有遇到bug的话,可以直接移动就可以了,我把直接移动的代码放在最下面了。
oldGrid和newGrid是两个装配好的表格
items:[{
xtype:"button",
text:"上移",
width:50,
id:"leftupbutton",
style:"padding:60px 0px 0px 15px",
handler: function() {
var records = oldGrid.getSelectionModel().getSelections();
var array = [];
for(var i in records){
var record = records[i];
array[i] = record;
}
var arrIndexs = [];//存储排序之前的索引,下面进行重新排序
var tempIndex = [];//存储排序之前的索引,不进行重新排序,用来获得行数据
for(var i in array){//存储索引
if(!isNaN(i)){
var record = array[i];
var index = oldDs.indexOf(record);
arrIndexs[i] = index;
tempIndex[i] = index;
}else{
break;
}
}
//冒泡排序法对索引值进行重新排序
var temp = 0;
for (var i = 0; i < arrIndexs.length; i++){
for (var j = 0; j < arrIndexs.length - i; j++){
if (arrIndexs[j] > arrIndexs[j + 1]){
temp = arrIndexs[j + 1];
arrIndexs[j + 1] = arrIndexs[j];
arrIndexs[j] = temp;
}
}
}
var selectIndex = [];//存储刷新界面后处于选中状态的行的索引
for(var k=0;k<arrIndexs.length;k++){
var index = arrIndexs[k];
for(var j in tempIndex){//遍历临时数组,获取到索引值对应的原始行数据数组所在的索引位置
if(!isNaN(j)){
if(tempIndex[j] == index){
var dataIndex = j;
}
}else{
break;
}
}
var record = records[dataIndex];
selectIndex[k] = index-1;
if (index > 0) {
oldDs.removeAt(index);
oldDs.insert(index - 1, record);
oldGrid.getView().refresh();
oldGrid.getSelectionModel().selectRows(selectIndex);
}else{
Ext.MessageBox.alert("hello","已经到了第一行!");
break;
}
}
}
},{
xtype:"button",
text:"下移",
width:50,
id:"leftdownbutton",
style:"padding:10px 0px 0px 15px",
handler: function() {
var records = oldGrid.getSelectionModel().getSelections();
for(var i in records){
if(!isNaN(i)){
var j=i;
}else{
break;
}
}
for(j=j;j>=0;j--){
// var record = records[j];
// var index = oldDs.indexOf(record);
var arrIndexs = [];
var tempIndex = [];
for(var i in records){
if(!isNaN(i)){
var record = records[i];
var index = oldDs.indexOf(record);
arrIndexs[i] = index;
tempIndex[i] = index;
}else{
break;
}
}
//冒泡排序法对索引值进行重新排序
var temp = 0;
for (var i = 0; i < arrIndexs.length; i++){
for (var j = 0; j < arrIndexs.length - i; j++){
if (arrIndexs[j] > arrIndexs[j + 1]){
temp = arrIndexs[j + 1];
arrIndexs[j + 1] = arrIndexs[j];
arrIndexs[j] = temp;
}
}
}
var selectIndex = [];
for(var i=arrIndexs.length-1;i>=0;i--){
var index = arrIndexs[i];
for(var j in tempIndex){
if(!isNaN(j)){
if(tempIndex[j] == index){
var dataIndex = j;
}
}else{
break;
}
}
var record = records[dataIndex];
selectIndex[i] = index+1;
if (index < oldDs.getCount() - 1) {
oldDs.removeAt(index);
oldDs.insert(index + 1, record);
oldGrid.getView().refresh();// 刷新行号
oldGrid.getSelectionModel().selectRows(selectIndex);
}else{
Ext.MessageBox.alert("hello","已经到了最后一行!");
break;
}
}
}
}
},{
xtype:"button",
text:"右移",
width:50,
id:"leftrightbutton",
style:"padding:10px 0px 0px 15px",
handler: function() {
var records = oldGrid.getSelectionModel().getSelections();
var arrIndexs = [];
var tempIndex = [];
for(var i in records){
if(!isNaN(i)){
var record = records[i];
var index = oldDs.indexOf(record);
arrIndexs[i] = index;
tempIndex[i] = index;
}else{
break;
}
}
//冒泡排序法对索引值进行重新排序
var temp = 0;
for (var i = 0; i < arrIndexs.length; i++){
for (var j = 0; j < arrIndexs.length - i; j++){
if (arrIndexs[j] > arrIndexs[j + 1]){
temp = arrIndexs[j + 1];
arrIndexs[j + 1] = arrIndexs[j];
arrIndexs[j] = temp;
}
}
}
var selectIndex = [];
var j = 0;//因为移动一行数据之后表格就会更新,所以减去一个变量来实现之后移动正确的行
for(var k=0;k<arrIndexs.length;k++){
var index = arrIndexs[k];
for(var i in tempIndex){
if(!isNaN(i)){
if(tempIndex[i] == index){
var dataIndex = i;
}
}else{
break;
}
}
var record = records[dataIndex];
if(index>=0){
oldDs.removeAt(index-j);
j++;
var rightIndex = newGrid.getStore().getCount();
selectIndex[k] = rightIndex;
newDs.insert(rightIndex,record);
oldGrid.getView().refresh();
newGrid.getView().refresh();
newGrid.getSelectionModel().selectRows(selectIndex);
}else if(record == ""){
Ext.MessageBox.alert("hello","已经没有数据可以移动!");
}
}
}
}
}]
简单的移动代码
上移:
var records = oldGrid.getSelectionModel().getSelections();
for(var i in records){
var record = records[i];
var index = oldDs.indexOf(record);
if (index > 0) {
oldDs.removeAt(index);
oldDs.insert(index - 1, record);
oldGrid.getView().refresh();
oldGrid.getSelectionModel().selectRow(index - 1);
}else{
break;
}
}
下移:
var records = oldGrid.getSelectionModel().getSelections();
// var record = oldGrid.getSelectionModel().getSelected();
for(var i in records){
if(!isNaN(i)){
var j=i;
}else{
break;
}
}
for(j=j;j>=0;j--){
var record = records[j];
var index = oldDs.indexOf(record);
if (index < oldDs.getCount() - 1) {
oldDs.removeAt(index);
oldDs.insert(index + 1, record);
oldGrid.getView().refresh();// 刷新行号
oldGrid.getSelectionModel().selectRow(index + 1);
}else{
break;
}
}
移动到另一个表格中:
var records = oldGrid.getSelectionModel().getSelections();
// var record = oldGrid.getSelectionModel().getSelected();
for(var i in records){
var record = records[i];
var index = oldDs.indexOf(record);
if(index>=0){
oldDs.removeAt(index);
var rightIndex = newGrid.getStore().getCount();
newDs.insert(rightIndex,record);
oldGrid.getView().refresh();
newGrid.getView().refresh();
newGrid.getSelectionModel().selectRow(rightIndex);
}
}