GirdView拖动单元格,鼠标释放后更新拖动范围内的单元格

来源:互联网 发布:windowsphone软件 编辑:程序博客网 时间:2024/06/13 15:19
 
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title>无标题页</title>    <style type="text/css">        body{margin:0px;padding:0px;}        td{cursor:move;width:100px;text-align:center;}        #spantd{background-color:Red;border:1px solid red;position:absolute;text-align:center;cursor:move;color:White;z-index:3;filter:alpha(opacity=50);opacity:0.5}    </style>    <script type="text/javascript">        function Drag(gvID){                        this.gvID=typeof gvID=="string"?document.getElementById(gvID):gvID;            this.gvLeft=this.gvID.offsetLeft;            this.gvTop = this.gvID.offsetTop;            this.gvHeight=this.gvID.offsetHeight;        }        Drag.prototype={            init:function(){                  var td = this.gvID.getElementsByTagName("td");                  var len = td.length;                  for(var i=0;i<len;i++){                       this.addEvent(td[i],"mousedown",this.bindEvent(this,this.Down,td[i]));                  }            },            Down:function(){                var e = arguments[0];                var thistd = arguments[1];                   this.oLeft = thistd.offsetLeft+this.gvLeft;                this.oTop = thistd.offsetTop+this.gvTop;                var createspan=document.createElement("span");                createspan.id="spantd";                createspan.innerHTML=thistd.innerHTML;                createspan.style.top=this.oTop+"px";                createspan.style.left=this.oLeft+"px"                createspan.style.height=thistd.offsetHeight-2+"px";                createspan.style.width=thistd.offsetWidth-2+"px";                document.body.appendChild(createspan);                this.newtop = e.clientY-this.oTop;                this.oMove = this.bindEvent(this,this.Move,createspan);                this.oUp = this.bindEvent(this,this.Up,[createspan,thistd]);                this.addEvent(document,"mousemove",this.oMove);                this.addEvent(document,"mouseup",this.oUp);            },            Move:function(){                var e = arguments[0];                var thisspan = arguments[1];                window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();                var top = e.clientY-this.newtop;                if(top<=this.gvTop+thisspan.offsetHeight)                    top=this.gvTop+thisspan.offsetHeight;                if(top+thisspan.offsetHeight>=this.gvHeight)                    top=this.gvHeight-thisspan.offsetHeight;                thisspan.style.top=top+"px";            },            Up:function(){                var e = arguments[0];                var thisspan=arguments[1][0];                var thistd = arguments[1][1];                var index = Math.round((parseInt(thisspan.style.top)-parseInt(this.oTop))/parseInt(thisspan.offsetHeight));                var parent = thistd.parentNode.getElementsByTagName("td");                var indexTwo=0;                for(var i=0;i<parent.length;i++){                    if(parent[i]==thistd){                        indexTwo=i;                        break;                    }                }                if(thisspan)                    document.body.removeChild(thisspan);                 var star=0;                var child = thistd.parentNode;                while(child!=null){                    if(star==index)                        break;                    if(index>0){                        ++star;                        child=child.nextSibling;                    }                    else{                        --star;                        child=child.previousSibling;                    }                }                child.getElementsByTagName("td")[indexTwo].innerHTML=thistd.innerHTML;                                this.deleteEvent(document,"mousemove",this.oMove);                this.deleteEvent(document,"mouseup",this.oUp);            },            bindEvent:function(obj,fun,para){                  return function(e){                     fun.apply(obj,[e||window.event,para]);                  }            },            addEvent:function(OTarget,Name,FunName){                if(OTarget.addEventListener){                    OTarget.addEventListener(Name,FunName,false);                }                else if(OTarget.attachEvent){                    OTarget.attachEvent("on"+Name,FunName);                }                else{                    OTarget["on"+Name]=FunName;                }            },            deleteEvent:function(oTarget,name,funName){                if(oTarget.removeEventListener) {                      oTarget.removeEventListener(name,funName,false);                  }                 else if(oTarget.detachEvent) {                      oTarget.detachEvent("on" + name,funName);                  }                else{                      oTarget["on" + name] = null;                  }             }        }        window.onload = function(){            var d = new Drag("GridView2");            d.init();                    }    </script></head><body>    <form id="form1" runat="server">    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" >    <Columns>        <asp:BoundField HeaderText="ID" DataField="ID" />        <asp:BoundField HeaderText="Name" DataField="Name" />    </Columns>    </asp:GridView>        </form></body></html>

    protected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {            GridView2.DataSource = getTable();            GridView2.DataBind();        }    }    public DataTable getTable()    {        string[] name = { "张三", "李四", "王五","赵六","林七" };        DataTable dt = new DataTable("XML");        dt.Columns.Add("ID", typeof(System.Int32));        dt.Columns.Add("Name", typeof(System.String));        dt.Columns.Add("Time", typeof(System.DateTime));        for (int i = 0; i < name.Length; i++)        {            DataRow row = dt.NewRow();            row[0] = i + 1;            row[1] = name[i];            row[2] = Convert.ToDateTime("2011-6-2");            dt.Rows.Add(row);        }        return dt;    }