android gridview拖动排序,Asp.net GridView 拖拽排序    原创(欢迎拍砖,敬请嘴下留情!)...

原理:客户端排序(或者说组织新的排序顺序),Ajax 更新服务器端数据。

客户端用jquery插件sortable实现拖拽排序,保存之前检索顺序变化了的数据,并组织成Json数据,用AJax传送到服务器端的处理文件(这里用的是一般处理文件),进行数据库的更新。难点之处在于如何检测出顺序变化了的数据,或者说如何标示状态变化的数据。本文没有实现如何去标示顺序变化的数据,而是保存了数据初始化时的顺序(注:orderid

的顺序表中有排序字段orderid),在排序结束之后保存之前,再一次获取当前的数据排序顺序(orderid

的顺序),在比较这两个数组,若相应索引处数据不一样即认为顺序发生了改变,此时再获取产品的ID和新的顺序ID(orderid),组织成Json格式发送到服务器进行更新

。大体思路是这样,可能方法比较笨啊,如果各位有好的方法或建议请留言交流,谢谢!

如何实现:

1、客户端代码

//客户端用来转换Json字符串

//Jquery 文件

//Jquery

排序插件

$(function() {

//存储初始化时数据的排序顺序

var orderid = new Array();

$("tr:not(:first)").each(function() {

orderid.push($(this).find('span').text());

});

//让Gridview支持拖拽功能,去掉表头不让其能够拖动

$('#GridView1').sortable({ items: 'tr:not(:first)' });

//保存按钮事件

$("#newid").click(function() {

var idorder = new Array();//保存新的数据排序顺序

var arr = new Array(); //保存顺序发生变化的数据,用于提交到服务器

var proidhttp://www.hrgy.net/, newid;

initialize(idorder);

//遍历查找顺序发生了变

for (var key in orderid) {

if (orderid[key] != idorder[key]) {

proid = $('span[title="' + idorder[key] +

'"]').parents("tr").children(":first").html();

newid = orderid[key];

// alert($('span[title="' + idorder[key] +

'"]').parents("tr").children(":first").html() + ' ' +

orderid[key]);

arr.push(new orderinfo(proidhttp://www.jsjji.com/,

newid));

}

}

// alert(JSON.stringify(arr));

//发送Ajax请求

$.post( 'Handler2.ashx', {data:

JSON.stringify(arr)},function(){

alert('Success');

} );

});

})

//用于初始化数组

function initialize(obj) {

$("tr:not(:first)").each(function() {

obj.push($(this).find('span').text());

});

}

//对象方式组织顺序变化的数据

function orderinfo(proid, orderid) {

this.proid = proid;

this.orderid = orderid;

}

2、服务器端代码

服务器处理客户端Post来的Json字符串,将其序列化为对象的格式。采用第三方插件(不知对否)Newtonsoft.Json.dll.

引用命名空间:using Newtonsoft.Json;

使用其JsonConvert.DeserializeObject<>()方法序列化数据

string txt = context.Request["data"];

List

products=JsonConvert.DeserializeObject>(txt);

此处的info(类)是一个与客户端的orderinfo函数相对应(私有字段的名称需要一致,因为要做序列化)

(注:这个地方的阐述可能有点问题)

public class info{

public info()

{

}

public info(string proid, string orderid)

{

this.ProID = proid;

this.OrderID = orderid;

}

private string proid;

public string ProID

{

get { return proid; }

set { proid = value; }

}

private string orderid;

public string OrderID

{

get { return orderid; }

set { orderid = value; }

}

}

其它的就是更新到数据库了。就写到这里吧 !

声明:本人知识有限,文章中有的地方阐述可能欠妥或值得商榷,敬请原谅!写下本文的初衷是做个记录以备日后之用,如能对大家有所帮助,实属意外收获啊,呵呵。欢迎指出问题,最好能提供解决之道,以供大家交流学习!谢谢!

欢迎拍砖,嘿嘿!