javascriptÖ®dhDataGrid Ver2.0.0´úÂë

¡¡¡¡Õë¶ÔdhDataGridµÄǰһ°æ±¾Ver1.0.0¶ø×öµÄ¸üУ¡

¡¡¡¡1¡¢±êÌâÀ¸¡¢×ó±ß±ßÀ¸¹Ì¶¨·½Ê½¸üУ¬È¡Ïûexpression·½Ê½£»

¡¡¡¡2¡¢ÅÅÐò·½Ê½¸üУ¬Í¬Ê±Ö§³ÖÊý×Ö¡¢×Ö·û¡¢ÈÕÆÚ¡¢Êý×Ö×Ö·û»ìºÏ¡¢ÖÐÎĺº×ÖµÄÅÅÐò£»

¡¡¡¡3¡¢Ö§³Ö»»·ô£¬Äú¿ÉÒÔ×Ô¼º¶¨ÖƸÿؼþÑùʽ£»

¡¡¡¡4¡¢Ô¤Áô[Ë«»÷]¡¢[ÓÒ¼ü]¹¦ÄÜ£»

¡¡¡¡5¡¢Ö§³ÖIE¡¢FF£»

¡¡¡¡CSS£º

¡¡¡¡/*dhdatagrid ´ó¿éÑùʽ*/

¡¡¡¡#dhdatagrid {position:relative;width:500px;height:200px;background:white;margin:0px;padding:0px;overflow:hidden;border:1px inset;-moz-user-select:none;}

¡¡¡¡/*dhdatagrid ±í¸ñÈ«¾ÖÑùʽ*/

¡¡¡¡#dhdatagrid table {table-layout:fixed;margin:0px;}

¡¡¡¡#dhdatagrid table td {height:18px;cursor:default;font-size:12px;font-family:verdana;overflow:hidden;white-space:nowrap;text-indent:2px;border-right:1px solid buttonface;border-bottom:1px solid buttonface;}

¡¡¡¡#dhdatagrid table td .arrow {font-size:8px;color:#808080;}

¡¡¡¡#dhdatagrid table .lastdata {border-right:none;}

¡¡¡¡#dhdatagrid table .column {width:120px;cursor:default;background:buttonface;border-top:1px solid #fff;border-right:1px solid #404040;border-bottom:1px solid #404040;border-left:1px solid #fff;}

¡¡¡¡#dhdatagrid table .over {width:120px;cursor:default;background:buttonface;border-top:1px solid #fff;border-right:1px solid #404040;border-bottom:1px solid #404040;border-left:1px solid #fff;}

¡¡¡¡#dhdatagrid table .sortdown {width:120px;cursor:default;background:buttonface;border-right:1px solid #ffffff;border-bottom:1px solid #ffffff;border-left:1px solid #404040;border-top:1px solid #404040;position:relative;left:1px;}

¡¡¡¡#dhdatagrid table .dataover {background:#FAFAFA;}

¡¡¡¡#dhdatagrid table .firstcolumn {width:30px;text-indent:0px;text-align:center;background:buttonface;border-top:1px solid #fff;border-right:1px solid #404040;border-bottom:1px solid #404040;border-left:1px solid #fff;}

¡¡¡¡#dhdatagrid table .lastcolumn {background:buttonface;border-top:1px solid #fff;border-right:1px solid #404040;border-bottom:1px solid #404040;border-left:1px solid #fff;}

¡¡¡¡/*dhdatagrid Ñ¡¶¨ÐÐÑùʽ*/

¡¡¡¡#dhdatagrid table .selectedrow {background:highlight;color:white;}

¡¡¡¡/*dhdatagrid ±íÍ·Ñùʽ*/

¡¡¡¡#dhdatagrid #titlecolumn {width:100%;position:absolute;top:0px;left:0px;z-index:3;}

¡¡¡¡/*dhdatagrid ×ó±ßÀ¸Ñùʽ*/

¡¡¡¡#dhdatagrid #slidecolumn {width:30px;position:absolute;top:0px;left:0px;z-index:2;}

¡¡¡¡#dhdatagrid #slidecolumn td {width:30px;text-indent:0px;text-align:center;background:buttonface;border-top:1px solid #fff;border-right:1px solid #404040;border-bottom:1px solid #404040;border-left:1px solid #fff;}

¡¡¡¡/*dhdatagrid ÄÚÈݱíÌåÑùʽ*/

¡¡¡¡#dhdatagrid #datacolumn {width:100%;position:absolute;top:0px;left:0px;}

¡¡¡¡/*dhdatagrid Ô­µãÑùʽ*/

¡¡¡¡#dhdatagrid #zero {width:30px;height:18px;margin:0px;padding:0px;position:absolute;top:0px;left:0px;z-index:10;background:buttonface;border-top:1px solid #fff;border-right:1px solid #404040;border-bottom:1px solid #404040;border-left:1px solid #fff;text-align:center;font-size:10px;color:#A19F92;}

¡¡¡¡JS£º

¡¡¡¡function dhdatagrid(){

¡¡¡¡//author:dh20156;

¡¡¡¡this.callname = "dhdg";

¡¡¡¡this.width = 500;

¡¡¡¡this.height = 200;

¡¡¡¡this.rid = "dhdatagrid";

¡¡¡¡this.columns = [];

¡¡¡¡this.data = [];

¡¡¡¡this.dblclick_fun = function(){}

¡¡¡¡this.contextmenu_fun = function(){}

¡¡¡¡this.parentNode = document.body;

¡¡¡¡var dh = this;

¡¡¡¡var framediv = null;

¡¡¡¡var zerobj = null;

¡¡¡¡var leftobj = null;

¡¡¡¡var titleobj = null;

¡¡¡¡var dataobj = null;

¡¡¡¡var hbar = null;

¡¡¡¡var vbar = null;

¡¡¡¡var bgbar = null;

¡¡¡¡//¸Ä±äÁпí³õʼλÖÃ

¡¡¡¡var ml = 0;

¡¡¡¡//¸Ä±äÁпí¶ÔÏó³õʼ¿í¶È

¡¡¡¡var ow = 0;

¡¡¡¡//¸Ä±äÁпí¶ÔÏó

¡¡¡¡var tdobj = null;

¡¡¡¡//µ±Ç°Ñ¡¶¨ÐÐË÷Òý

¡¡¡¡var nowrow = null;

¡¡¡¡//ÊÇ·ñ¸ü¸Ä´¹Ö±¹ö¶¯ÌõλÖÃ

¡¡¡¡var changeposv = true;

¡¡¡¡this.init = function(){

¡¡¡¡//init the data ³õʼÊý¾Ý

¡¡¡¡var dgc = "";

¡¡¡¡if(this.columns.length>0){

¡¡¡¡dgc = "<tr><td class=\"firstcolumn\"> </td>";

¡¡¡¡for(var cc=0;cc<this.columns.length;cc++){

¡¡¡¡dgc += "<td class=\"column\" onmouseover=\""+this.callname+".over(this);\" onmouseout=\""+this.callname+".out(this);\" onmousemove=\""+this.callname+".cc(event,this);\" onmousedown=\""+this.callname+".rsc_d(event,this);\" onmouseup=\""+this.callname+".mouseup(this);\">"+this.columns[cc]+"<span class=\"arrow\"></span></td>";

¡¡¡¡}

¡¡¡¡dgc += "<td class=\"lastcolumn\"> </td></tr>";

¡¡¡¡}

¡¡¡¡var dgs = "";

¡¡¡¡var dgd = "";

¡¡¡¡if(this.data.length>0){

¡¡¡¡//µÚÒ»ÁÐ

¡¡¡¡dgs = "<tr><td> </td></tr>";

¡¡¡¡for(var r=0;r<this.data.length;r++){

¡¡¡¡dgs += "<tr><td>"+(r+1)+"</td></tr>";

¡¡¡¡dgd += "<tr onmouseover=\""+this.callname+".dataover(this);\" onmouseout=\""+this.callname+".dataout(this);\"><td class=\"firstcolumn\"> </td>";

¡¡¡¡for(var c=0;c<this.data[r].length;c++){

¡¡¡¡dgd += "<td ondblclick=\""+this.callname+".dblclick_fun(this);\" oncontextmenu=\""+this.callname+".contextmenu_fun(this);\">"+this.data[r][c]+"</td>";

¡¡¡¡}

¡¡¡¡dgd += "<td class=\"lastdata\"> </td></tr>";

¡¡¡¡}

¡¡¡¡if(dgc==""){

¡¡¡¡dgc = "<tr><td class=\"firstcolumn\"> </td>";

¡¡¡¡for(var dc=0;dc<this.data[0].length;dc++){

¡¡¡¡dgc += "<td class=\"column\" onmouseover=\""+this.callname+".over(this);\" onmouseout=\""+this.callname+".out(this);\" onmousemove=\""+this.callname+".cc(event,this);\" onmousedown=\""+this.callname+".rsc_d(event,this);\" onmouseup=\""+this.callname+".mouseup(this);\">Expr"+(dc+1)+"<span class=\"arrow\"></span></td>";

¡¡¡¡}

¡¡¡¡dgc += "<td class=\"lastcolumn\"> </td></tr>";

¡¡¡¡}

¡¡¡¡}

¡¡¡¡//dhdatagrid frame ¿ò¼Ü

¡¡¡¡var dgframe = document.createElement("DIV");

¡¡¡¡dgframe.id = this.rid;

¡¡¡¡dgframe.onmousedown = function(e){e=e||window.event;getrow(e);}

¡¡¡¡dgframe.onmousemove = function(e){e=e||window.event;rsc_m(e);}

¡¡¡¡if(document.attachEvent){

¡¡¡¡document.attachEvent("onmouseup",rsc_u);

¡¡¡¡}else{

¡¡¡¡document.addEventListener("mouseup",rsc_u,false);

¡¡¡¡}

¡¡¡¡dgframe.oncontextmenu = function(){return false}

¡¡¡¡dgframe.onselectstart = function(){return false}

¡¡¡¡ae(dgframe);

¡¡¡¡//dhdatagrid zero point Áãµã

¡¡¡¡var dgzero = "<div id=\"zero\"></div>"

¡¡¡¡//dhdatagrid slidecolumn µÚÒ»ÁÐ

¡¡¡¡var dgslide = "<table cellpadding=\"0\" cellspacing=\"0\" id=\"slidecolumn\">"+dgs+"</table>";

¡¡¡¡//dhdatagrid column ±êÌâÀ¸

¡¡¡¡var dgcolumn = "<table cellpadding=\"0\" cellspacing=\"0\" id=\"titlecolumn\">"+dgc+"</table>";

¡¡¡¡//dhdatagrid data Êý¾Ý

¡¡¡¡var dgdata = "<table cellpadding=\"0\" cellspacing=\"0\" id=\"datacolumn\">"+dgc+dgd+"</table>";

¡¡¡¡//dhdatagrid hbar Ë®Æ½¹ö¶¯Ìõ

¡¡¡¡var dghbar = document.createElement("DIV");

¡¡¡¡dghbar.id = "hbar";

¡¡¡¡dghbar.style.position = "absolute";

¡¡¡¡dghbar.style.width = "100%";

¡¡¡¡dghbar.style.height = "17px";

¡¡¡¡dghbar.style.top = this.height-17;

¡¡¡¡dghbar.style.overflowX = "auto";

¡¡¡¡dghbar.style.zIndex = "10";

¡¡¡¡dghbar.onscroll = function(){scrh();}

¡¡¡¡dghbar.innerHTML = "<div style=\"width:100%;height:1px;overflow-y:hidden;\"> </div>";

¡¡¡¡//dhdatagrid vbar ´¹Ö±¹ö¶¯Ìõ

¡¡¡¡var dgvbar = document.createElement("DIV");

¡¡¡¡dgvbar.id = "vbar";

¡¡¡¡dgvbar.style.position = "absolute";

¡¡¡¡dgvbar.style.width = "17px";

¡¡¡¡dgvbar.style.height = "100%";

¡¡¡¡dgvbar.style.left = this.width-17;

¡¡¡¡dgvbar.style.overflowY = "auto";

¡¡¡¡dgvbar.style.zIndex = "10";

¡¡¡¡dgvbar.onscroll = function(){scrv();}

¡¡¡¡dgvbar.innerHTML = "<div style=\"width:1px;height:100%;overflow-x:hidden;\"> </div>";

¡¡¡¡//dhdatagrid bgbar ¹ö¶¯Ìõ±³¾°

¡¡¡¡var dgbgbar = document.createElement("DIV");

¡¡¡¡dgbgbar.id = "bgbar";

¡¡¡¡dgbgbar.style.background = "buttonface";

¡¡¡¡dgbgbar.style.position = "absolute";

¡¡¡¡dgbgbar.style.width = "100%";

¡¡¡¡dgbgbar.style.height = "17px";

¡¡¡¡dgbgbar.style.top = this.height-17;

¡¡¡¡dgbgbar.style.overflowX = "auto";

¡¡¡¡dgbgbar.style.zIndex = "9";

¡¡¡¡dgbgbar.style.display = "none";

¡¡¡¡dgbgbar.innerHTML = " ";

¡¡¡¡//appendChild

¡¡¡¡dgframe.innerHTML = dgzero+dgslide+dgcolumn+dgdata;

¡¡¡¡dgframe.appendChild(dghbar);

¡¡¡¡dgframe.appendChild(dgvbar);

¡¡¡¡dgframe.appendChild(dgbgbar);

¡¡¡¡this.parentNode.appendChild(dgframe);

¡¡¡¡if(document.attachEvent){

¡¡¡¡document.attachEvent("onkeydown",updown);

¡¡¡¡}else{

¡¡¡¡document.addEventListener("keydown",updown,false);

¡¡¡¡}

¡¡¡¡framediv = dgframe;

¡¡¡¡zerobj = document.getElementById("zero");

¡¡¡¡leftobj = document.getElementById("slidecolumn");

¡¡¡¡titleobj = document.getElementById("titlecolumn");

¡¡¡¡dataobj = document.getElementById("datacolumn");

¡¡¡¡hbar = dghbar;

¡¡¡¡vbar = dgvbar;

¡¡¡¡bgbar = dgbgbar;

¡¡¡¡var btt = getCurrentStyle(framediv,"borderTopWidth");

¡¡¡¡var btr = getCurrentStyle(framediv,"borderRightWidth");

¡¡¡¡var btb = getCurrentStyle(framediv,"borderBottomWidth");

¡¡¡¡var btl = getCurrentStyle(framediv,"borderLeftWidth");

¡¡¡¡var fh = getCurrentStyle(framediv,"height");

¡¡¡¡var zh = getCurrentStyle(zerobj,"height");

¡¡¡¡var zbt = getCurrentStyle(zerobj,"borderTopWidth");

¡¡¡¡var zbb = getCurrentStyle(zerobj,"borderBottomWidth");

¡¡¡¡if(document.all){

¡¡¡¡vbar.style.left = parseInt(vbar.style.left)-parseInt(btr)-parseInt(btl);

¡¡¡¡}else{

¡¡¡¡framediv.style.height = parseInt(fh)-parseInt(btb)-parseInt(btt);

¡¡¡¡zerobj.style.height = parseInt(zh)-parseInt(zbb)-parseInt(zbt);

¡¡¡¡}

¡¡¡¡hbar.style.top = parseInt(hbar.style.top)-parseInt(btb)-parseInt(btt);

¡¡¡¡bgbar.style.top = parseInt(bgbar.style.top)-parseInt(btb)-parseInt(btt);

¡¡¡¡}

¡¡¡¡function getCurrentStyle(oElement, sProperty) {

¡¡¡¡if(oElement.currentStyle){

¡¡¡¡return oElement.currentStyle[sProperty];

¡¡¡¡}else if(window.getComputedStyle){

¡¡¡¡sProperty = sProperty.replace(/([A-Z])/g, "-$1").toLowerCase();

¡¡¡¡return window.getComputedStyle(oElement, null).getPropertyValue(sProperty);

¡¡¡¡}else{

¡¡¡¡return null;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡//ÉèÖÿé¹ö¶¯Ìõ

¡¡¡¡this.setwh = function(){

¡¡¡¡hbar.style.display = "block";

¡¡¡¡vbar.style.display = "block";

¡¡¡¡hbar.childNodes[0].style.width = dataobj.offsetWidth;

¡¡¡¡vbar.childNodes[0].style.height = dataobj.offsetHeight;

¡¡¡¡if(hbar.childNodes[0].offsetWidth<=hbar.offsetWidth){

¡¡¡¡hbar.style.display = "none";

¡¡¡¡}else{

¡¡¡¡hbar.style.display = "block";

¡¡¡¡}

¡¡¡¡if(vbar.childNodes[0].offsetHeight<=vbar.offsetHeight){

¡¡¡¡vbar.style.display = "none";

¡¡¡¡}else{

¡¡¡¡vbar.style.display = "block";

¡¡¡¡}

¡¡¡¡if(hbar.childNodes[0].offsetWidth>hbar.offsetWidth && vbar.childNodes[0].offsetHeight>vbar.offsetHeight && changeposv){

¡¡¡¡bgbar.style.display = "block";

¡¡¡¡hbar.style.width = hbar.offsetWidth-17;

¡¡¡¡vbar.style.height = vbar.offsetHeight-17;

¡¡¡¡vbar.childNodes[0].style.height = vbar.childNodes[0].offsetHeight+17;

¡¡¡¡changeposv = false;

¡¡¡¡}

¡¡¡¡if(hbar.childNodes[0].offsetWidth<=hbar.offsetWidth+17 && !changeposv){

¡¡¡¡bgbar.style.display = "none";

¡¡¡¡hbar.childNodes[0].style.width = 0;

¡¡¡¡hbar.style.width = hbar.offsetWidth+17;

¡¡¡¡vbar.style.height = vbar.offsetHeight+17;

¡¡¡¡changeposv = true;

¡¡¡¡if(vbar.offsetHeight-dataobj.offsetHeight>dataobj.offsetTop && document.all){

¡¡¡¡leftobj.style.top = leftobj.offsetTop+17;

¡¡¡¡dataobj.style.top = dataobj.offsetTop+17;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡//Êó±ê¹öÂÖ£¬Áбí¹ö¶¯Ê¼þ

¡¡¡¡function mwEvent(e){

¡¡¡¡e=e||window.event;

¡¡¡¡if(e.wheelDelta<=0 || e.detail>0){

¡¡¡¡vbar.scrollTop += 18;

¡¡¡¡}else {

¡¡¡¡vbar.scrollTop -= 18;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡function ae(obj){

¡¡¡¡if(document.attachEvent){

¡¡¡¡obj.attachEvent("onmousewheel",mwEvent);

¡¡¡¡}else{

¡¡¡¡obj.addEventListener("DOMMouseScroll",mwEvent,false);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡//¹ö¶¯Ìõʼþ

¡¡¡¡function scrv(){

¡¡¡¡leftobj.style.top = -(vbar.scrollTop);

¡¡¡¡dataobj.style.top = -(vbar.scrollTop);

¡¡¡¡}

¡¡¡¡function scrh(){

¡¡¡¡titleobj.style.left = -(hbar.scrollLeft);

¡¡¡¡dataobj.style.left = -(hbar.scrollLeft);

¡¡¡¡}

¡¡¡¡//Ñ¡ÔñÐÐ

¡¡¡¡function getrow(e){

¡¡¡¡e=e||window.event;

¡¡¡¡var esrcobj = e.srcElement?e.srcElement:e.target;

¡¡¡¡if(esrcobj.parentNode.tagName=="TR"){

¡¡¡¡var epobj = esrcobj.parentNode;

¡¡¡¡var eprowindex = epobj.rowIndex;

¡¡¡¡if(eprowindex!=0){

¡¡¡¡if(nowrow!=null){

¡¡¡¡dataobj.rows[nowrow].className = "";

¡¡¡¡}

¡¡¡¡dataobj.rows[eprowindex].className = "selectedrow";

¡¡¡¡nowrow = eprowindex;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡//¸ü¸ÄÁпí

¡¡¡¡this.rsc_d = function(e,obj){

¡¡¡¡var px = document.all?e.offsetX:e.layerX-obj.offsetLeft;

¡¡¡¡if(px>obj.offsetWidth-6 && px<obj.offsetWidth){

¡¡¡¡e=e||window.event;

¡¡¡¡obj=obj||this;

¡¡¡¡ml = e.clientX;

¡¡¡¡ow = obj.offsetWidth;

¡¡¡¡tdobj = obj;

¡¡¡¡if(obj.setCapture){

¡¡¡¡obj.setCapture();

¡¡¡¡}else{

¡¡¡¡e.preventDefault();

¡¡¡¡}

¡¡¡¡}else{

¡¡¡¡if(nowrow!=null){

¡¡¡¡dataobj.rows[nowrow].className = "";

¡¡¡¡}

¡¡¡¡if(obj.getAttribute("sort")==null){

¡¡¡¡obj.setAttribute("sort",0);

¡¡¡¡}

¡¡¡¡var sort = obj.getAttribute("sort");

¡¡¡¡if(sort==1){

¡¡¡¡dgsort(obj,true);

¡¡¡¡obj.setAttribute("sort",0);

¡¡¡¡}else{

¡¡¡¡dgsort(obj,false);

¡¡¡¡obj.setAttribute("sort",1);

¡¡¡¡}

¡¡¡¡obj.className = "sortdown";

¡¡¡¡}

¡¡¡¡}

¡¡¡¡this.mouseup = function(obj){

¡¡¡¡obj.className = "over";

¡¡¡¡}

¡¡¡¡function rsc_m(e){

¡¡¡¡if(tdobj!=null){

¡¡¡¡e=e||window.event;

¡¡¡¡var newwidth = ow-(ml-e.clientX);

¡¡¡¡if(newwidth>5){

¡¡¡¡tdobj.style.width = newwidth;

¡¡¡¡dataobj.rows[0].cells[tdobj.cellIndex].style.width = newwidth;

¡¡¡¡}else{

¡¡¡¡tdobj.style.width = 5;

¡¡¡¡dataobj.rows[0].cells[tdobj.cellIndex].style.width = 5;

¡¡¡¡}

¡¡¡¡dh.setwh();

¡¡¡¡scrh();

¡¡¡¡}

¡¡¡¡}

¡¡¡¡function rsc_u(e){

¡¡¡¡if(tdobj!=null){

¡¡¡¡e=e||window.event;

¡¡¡¡var newwidth = ow-(ml-e.clientX);

¡¡¡¡if(newwidth>5){

¡¡¡¡tdobj.style.width = newwidth;

¡¡¡¡dataobj.rows[0].cells[tdobj.cellIndex].style.width = newwidth;

¡¡¡¡}else{

¡¡¡¡tdobj.style.width = 5;

¡¡¡¡dataobj.rows[0].cells[tdobj.cellIndex].style.width = 5;

¡¡¡¡}

¡¡¡¡if(tdobj.releaseCapture){

¡¡¡¡tdobj.releaseCapture();

¡¡¡¡}

¡¡¡¡ml = 0;

¡¡¡¡ow = 0;

¡¡¡¡tdobj = null;

¡¡¡¡}

¡¡¡¡dh.setwh();

¡¡¡¡scrh();

¡¡¡¡}

¡¡¡¡this.cc = function(e,obj){

¡¡¡¡var px = document.all?e.offsetX:e.layerX-obj.offsetLeft;

¡¡¡¡if(px>obj.offsetWidth-6 && px<obj.offsetWidth){

¡¡¡¡obj.style.cursor = "col-resize";

¡¡¡¡}else{

¡¡¡¡obj.style.cursor = "default";

¡¡¡¡}

¡¡¡¡}

¡¡¡¡this.over = function(obj){

¡¡¡¡obj.className = "over";

¡¡¡¡}

¡¡¡¡this.out = function(obj){

¡¡¡¡obj.className = "column";

¡¡¡¡}

¡¡¡¡this.dataover = function(obj){

¡¡¡¡if(obj.rowIndex!=nowrow){

¡¡¡¡obj.className = "dataover";

¡¡¡¡}

¡¡¡¡}

¡¡¡¡this.dataout = function(obj){

¡¡¡¡if(obj.rowIndex!=nowrow){

¡¡¡¡obj.className = "";

¡¡¡¡}

¡¡¡¡}

¡¡¡¡//¼üÅÌUp & Downʼþ

¡¡¡¡function updown(e){

¡¡¡¡e=e || window.event; e=e.which || e.keyCode;

¡¡¡¡var rl = dh.data.length;

¡¡¡¡switch(e){

¡¡¡¡case 38://Up;

¡¡¡¡if(nowrow!=null && nowrow>1){

¡¡¡¡vbar.scrollTop -= 18;

¡¡¡¡dataobj.rows[nowrow].className = "";

¡¡¡¡nowrow -= 1;

¡¡¡¡dataobj.rows[nowrow].className = "selectedrow";

¡¡¡¡};

¡¡¡¡break;

¡¡¡¡case 40://Down;

¡¡¡¡if(nowrow!=null && nowrow<rl){

¡¡¡¡vbar.scrollTop += 18;

¡¡¡¡dataobj.rows[nowrow].className = "";

¡¡¡¡nowrow += 1;

¡¡¡¡dataobj.rows[nowrow].className = "selectedrow";

¡¡¡¡};

¡¡¡¡break;

¡¡¡¡default:break;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡function dti(s){

¡¡¡¡var n = 0;

¡¡¡¡var a = s.match(/\d+/g);

¡¡¡¡for(var i=0;i<a.length;i++){

¡¡¡¡if(a[i].length<2){

¡¡¡¡a[i] = "0"+a[i];

¡¡¡¡}

¡¡¡¡}

¡¡¡¡n = a.join("");

¡¡¡¡return n;

¡¡¡¡}

¡¡¡¡//ÅÅÐò

¡¡¡¡function dgsort(obj,asc){

¡¡¡¡var rl = dh.data.length;

¡¡¡¡var ci = obj.cellIndex;

¡¡¡¡var rowsobj = [];

¡¡¡¡for(var i=1;i<dataobj.childNodes[0].rows.length;i++){

¡¡¡¡rowsobj[i-1] = dataobj.childNodes[0].rows[i];

¡¡¡¡}

¡¡¡¡rowsobj.sort(function(trObj1,trObj2){

¡¡¡¡if(!isNaN(trObj1.cells[ci].innerHTML.charAt(0)) && !isNaN(trObj2.cells[ci].innerHTML.charAt(0))){

¡¡¡¡if(asc){

¡¡¡¡return dti(trObj1.cells[ci].innerHTML)-dti(trObj2.cells[ci].innerHTML);

¡¡¡¡}else{

¡¡¡¡return dti(trObj2.cells[ci].innerHTML)-dti(trObj1.cells[ci].innerHTML);

¡¡¡¡}

¡¡¡¡}else{

¡¡¡¡if(asc){

¡¡¡¡return trObj1.cells[ci].innerHTML.localeCompare(trObj2.cells[ci].innerHTML);

¡¡¡¡}else{

¡¡¡¡return trObj2.cells[ci].innerHTML.localeCompare(trObj1.cells[ci].innerHTML);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡});

¡¡¡¡for(var i=0;i<rowsobj.length;i++){

¡¡¡¡dataobj.childNodes[0].appendChild(rowsobj[i]);

¡¡¡¡}

¡¡¡¡for(var c=1;c<obj.parentNode.cells.length-1;c++){

¡¡¡¡obj.parentNode.cells[c].childNodes[1].innerHTML = "";

¡¡¡¡}

¡¡¡¡if(asc){

¡¡¡¡obj.childNodes[1].innerHTML = "¡ø";

¡¡¡¡}else{

¡¡¡¡obj.childNodes[1].innerHTML = "¨‹";

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡<html>

¡¡¡¡<head>

¡¡¡¡<meta http-equiv="content-type" content="type=text/html; charset=gb2312">

¡¡¡¡<link type="text/css" rel="stylesheet" href="default/dhdatagrid.css">

¡¡¡¡<script language="javascript" src="dhdatagrid.js"></script>

¡¡¡¡</head>

¡¡¡¡<body style="background:#ECE9D8;">

¡¡¡¡<script language="javascript">

¡¡¡¡var dhdg = new dhdatagrid();

¡¡¡¡dhdg.callname = "dhdg";

¡¡¡¡dhdg.columns = ["Ãû³Æ","´óС","ÐÞ¸Äʱ¼ä"];

¡¡¡¡dhdg.data = [["01.jpg","49 KB","2006-12-6 17:06"],["02.gif","3 KB","2006-12-6 17:06"],["axjz.jpg","121 KB","2007-1-19 10:19"],["bb.jpg","314 KB","2006-10-24 15:49"],["cd056.jpg","50 KB","2007-1-5 10:03"],["d.psd","27,639 KB","2006-11-6 13:31"],["dhAJ2.htm","12 KB","2006-12-21 10:53"],["dhChange.htm","12 KB","2006-10-19 9:28"],["dhcombobox.htm","2 KB","2006-12-22 11:39"],["±£ÏÕ.txt","5 KB","2007-1-3 11:31"],["±õ½­Àö¾°.rar","1,048 KB","2007-1-18 14:23"],["»ý·Ö¶Ò½±.doc","634 KB","2007-1-19 11:17"],["Ç×ÈË.jpg","396 KB","2006-12-23 15:50"],["δ±êÌâ-2.jpg","61 KB","2006-12-23 15:46"]];

¡¡¡¡dhdg.dblclick_fun = function(e){alert(e+',ondblclick');}

¡¡¡¡dhdg.contextmenu_fun = function(e){alert(e+',oncontextmenu');}

¡¡¡¡dhdg.init();

¡¡¡¡dhdg.setwh();

¡¡¡¡</script>

¡¡¡¡</body>

¡¡¡¡</html>

¡¡¡¡×¢£º DEMO£¨ÑÝʾ£©£ºhttp://www.jxxg.com/dh20156/dhdatagrid/

¡¡¡¡Ô­ÎÄ£ºhttp://blog.csdn.net/dh20156/archive/2007/02/08/1505050.aspx

¡¡¡¡ÁíÍâÒ»¸ö·â×°µÄºÜ¼òµ¥µÄgrid by ÇØ»ÊÒ²°®JS

¡¡¡¡<style>

¡¡¡¡table{ width: 120%;height:auto;background:#E8E8E8; margin:0 auto; cursor:pointer}

¡¡¡¡table th{ background:url(http://www.cpp114.com/cppjob/bg.gif) repeat-x; font-size:12px; padding:2px 0;}

¡¡¡¡table td{ font-size:12px; text-align:center; padding:2px 0;}

¡¡¡¡input {border:none;position:absolute;display:none;text-align:center;}

¡¡¡¡select {position:absolute;display:none;}

¡¡¡¡</style>

¡¡¡¡<script>

¡¡¡¡var GridData = {

¡¡¡¡title: ["ÐÕÃû","ÐÔ±ð","ÄêÁä","ѧÀú","ÌØ³¤"],

¡¡¡¡type: [0,1,0,1,0],   //±à¼­¿òÀàÐÍ ŀ--textbox Ł---select

¡¡¡¡order: [-1,-1,-1,-1,-1],  //ÅÅÐòÀàÐÍ Ł----ÉýÐò   -1---½µÐò

¡¡¡¡data: [["ÕÅÈý","ÄÐ",27,"±¾¿Æ","×ãÇò"],

¡¡¡¡["YM","ÄÐ",26,"±¾¿Æ","Öзæ"],

¡¡¡¡["McGrady","ÄÐ",28,"²©Ê¿","ǰ·æ"],

¡¡¡¡["James","ÄÐ",25,"±¾¿Æ","Сǰ·æ"],

¡¡¡¡["Good","Å®",21,"¸ßÖÐ","ÉÌÆ·"],

¡¡¡¡["Fut","ÄÐ",22,"±¾¿Æ","WAR3"],

¡¡¡¡["Keens","ÄÐ",37,"¸ßÖÐ","SC"],

¡¡¡¡["Gruby","Å®",32,"±¾¿Æ","SC"],

¡¡¡¡["Grrr","ÄÐ",19,"˶ʿ","SC"],

¡¡¡¡["Sky","ÄÐ",22,"±¾¿Æ","WAR3"],

¡¡¡¡["Moon","ÄÐ",25,"±¾¿Æ","WAR3"]]

¡¡¡¡};

¡¡¡¡var ÐÔ±ð = ["ÄÐ", "Å®"];

¡¡¡¡var Ñ§Àú = ["¸ßÖÐ", "±¾¿Æ", "˶ʿ", "²©Ê¿"];

¡¡¡¡function MyGrid(data, cnt){

¡¡¡¡MyGrid.backColor = "#fdfdfd";

¡¡¡¡MyGrid.hoverColor = "#edfae9";

¡¡¡¡MyGrid.clickColor = "#e1e6f1";

¡¡¡¡this.datas = data;

¡¡¡¡this.container = cnt;

¡¡¡¡this.table;

¡¡¡¡this.curRow;

¡¡¡¡this.curCell;

¡¡¡¡this.editTools = [document.body.appendChild(document.createElement("input")),document.body.appendChild(document.createElement("select"))];

¡¡¡¡var CurGrid = this;

¡¡¡¡this.load = function(){   //gridÖØ»­Ä£¿é

¡¡¡¡/** ¼ÓÔØtable  **/

¡¡¡¡var tbStr = [];

¡¡¡¡tbStr.push("<table cellspacing='1'><tr height='25'>");

¡¡¡¡for(var o in this.datas.title){

¡¡¡¡tbStr.push("<th>" + this.datas.title[o] + (this.datas.order[o]==1?"¡ü":"¡ý") + "</th>");

¡¡¡¡}

¡¡¡¡tbStr.push("</tr>");

¡¡¡¡for(var i in this.datas.data){

¡¡¡¡tbStr.push("<tr bgcolor=" + MyGrid.backColor + " height='25'>");

¡¡¡¡for(var j in this.datas.data[i]){

¡¡¡¡tbStr.push("<td>" + this.datas.data[i][j] + "</td>");

¡¡¡¡}

¡¡¡¡tbStr.push("</tr>");

¡¡¡¡}

¡¡¡¡tbStr.push("</table>");

¡¡¡¡this.container.innerHTML = tbStr.join("");

¡¡¡¡this.table = this.container.firstChild;

¡¡¡¡/** ÉèÖñ༭¹¤¾ß  **/

¡¡¡¡this.editTools[0].onblur = function(){

¡¡¡¡CurGrid.curCell.removeChild(CurGrid.curCell.firstChild)

¡¡¡¡CurGrid.curCell.appendChild(document.createTextNode(this.value));

¡¡¡¡if(isNaN(CurGrid.datas.data[CurGrid.curCell.parentNode.rowIndex-1][CurGrid.curCell.cellIndex])){

¡¡¡¡CurGrid.datas.data[CurGrid.curCell.parentNode.rowIndex-1][CurGrid.curCell.cellIndex] = this.value;

¡¡¡¡}else{

¡¡¡¡CurGrid.datas.data[CurGrid.curCell.parentNode.rowIndex-1][CurGrid.curCell.cellIndex] = Number(this.value)

¡¡¡¡}

¡¡¡¡this.value = "";

¡¡¡¡this.style.display = "none";

¡¡¡¡}

¡¡¡¡this.editTools[1].onblur = function(){

¡¡¡¡this.options.length = 0;

¡¡¡¡this.style.display = "none";

¡¡¡¡}

¡¡¡¡this.editTools[1].onchange = function(){

¡¡¡¡CurGrid.curCell.removeChild(CurGrid.curCell.firstChild)

¡¡¡¡CurGrid.curCell.appendChild(document.createTextNode(this.value));

¡¡¡¡CurGrid.datas.data[CurGrid.curCell.parentNode.rowIndex-1][CurGrid.curCell.cellIndex] = this.value;

¡¡¡¡this.options.length = 0;

¡¡¡¡this.style.display = "none";

¡¡¡¡}

¡¡¡¡/** ÉèÖõ¥Ôª¸ñ  **/

¡¡¡¡for(var r=1; r<this.table.rows.length;r++){

¡¡¡¡this.table.rows[r].onmouseover = function(){ this.style.backgroundColor = MyGrid.hoverColor; }

¡¡¡¡this.table.rows[r].onmouseout = function(){

¡¡¡¡if(CurGrid.curRow!=this) this.style.backgroundColor = MyGrid.backColor;

¡¡¡¡else this.style.backgroundColor = MyGrid.clickColor;

¡¡¡¡}

¡¡¡¡for(var c=0;c<this.table.rows[r].cells.length;c++){

¡¡¡¡this.table.rows[r].cells[c].onclick = function(){

¡¡¡¡if(CurGrid.curRow) CurGrid.curRow.style.backgroundColor = MyGrid.backColor;

¡¡¡¡CurGrid.curRow = this.parentNode;

¡¡¡¡this.parentNode.style.backgroundColor = MyGrid.clickColor;

¡¡¡¡}

¡¡¡¡this.table.rows[r].cells[c].ondblclick = function(){

¡¡¡¡//alert("( " + this.cellIndex + "," + this.parentNode.rowIndex + " )  " + this.firstChild.data);

¡¡¡¡CurGrid.curCell = this;

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].style.display = "block";

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].style.width = this.offsetWidth;

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].style.height = this.offsetHeight;

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].style.left = getAbsPos(this).leftx - CurGrid.container.scrollLeft;

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].style.top = getAbsPos(this).topy - CurGrid.container.scrollTop;

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].focus();

¡¡¡¡if(CurGrid.datas.type[this.cellIndex] == 0){

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].select();

¡¡¡¡}else if(CurGrid.datas.type[this.cellIndex] == 1){

¡¡¡¡CurGrid.loadSelect(CurGrid.datas.title[this.cellIndex]);

¡¡¡¡}

¡¡¡¡CurGrid.editTools[CurGrid.datas.type[this.cellIndex]].value = this.firstChild.data;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡for(var g=0; g<this.table.rows[0].cells.length;g++){

¡¡¡¡this.table.rows[0].cells[g].onclick = function(){

¡¡¡¡CurGrid.datas.order[this.cellIndex] = -CurGrid.datas.order[this.cellIndex];

¡¡¡¡CurGrid.sort(this.cellIndex, CurGrid.datas.order[this.cellIndex]);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡this.sort = function(n, type){  //ÅÅÐò

¡¡¡¡this.datas.data = this.datas.data.sort(function(x,y){if (x[n]>y[n]){return type;}else if(x[n]<y[n]){return -type;}else{return 0;}});

¡¡¡¡this.load();

¡¡¡¡}

¡¡¡¡this.delRow = function(){   //ɾ³ýÐÐ

¡¡¡¡this.datas.data.splice(this.curRow.rowIndex-1, 1);

¡¡¡¡this.table.deleteRow(this.curRow.rowIndex);

¡¡¡¡}

¡¡¡¡this.loadSelect = function(type){  //¶ÁÈ¡ÏÂÀ­¿òÄÚÈÝ

¡¡¡¡var opts = this.editTools[1].options;

¡¡¡¡for(var o in eval(type)){

¡¡¡¡var opt = document.createElement("option");

¡¡¡¡opt.value = opt.text = eval(type)[o];

¡¡¡¡opts.add(opt);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡var grid;

¡¡¡¡window.onload = loadGrid;

¡¡¡¡function loadGrid(){

¡¡¡¡grid = new MyGrid(GridData, $("panel"));

¡¡¡¡grid.load();

¡¡¡¡}

¡¡¡¡function $(id){

¡¡¡¡return document.getElementById?document.getElementById(id):eval(id);

¡¡¡¡}

¡¡¡¡function getAbsPos(obj){

¡¡¡¡var objResult = new Object();

¡¡¡¡objResult.topy = obj.offsetTop;

¡¡¡¡objResult.leftx = obj.offsetLeft;

¡¡¡¡while( obj = obj.offsetParent){

¡¡¡¡objResult.topy += obj.offsetTop;

¡¡¡¡objResult.leftx += obj.offsetLeft;

¡¡¡¡}

¡¡¡¡return objResult;

¡¡¡¡}

¡¡¡¡</script>

¡¡¡¡<div id="panel" style="width:300px;height:300px;overflow:scroll;">

¡¡¡¡</div><br>

¡¡¡¡<input type="button" value="µ¼³öµ±Ç°ÐÐ" onclick="if(grid.curRow)alert(grid.curRow.innerText);else{alert('ÇëÑ¡ÖÐÒ»ÐÐ');}" style="display:block;border:1px outset;"><br>

¡¡¡¡<input type="button" value="µ¼³öËùÓÐÊý¾Ý" onclick="alert(grid.datas.data.join('\n'))" style="display:block;border:1px outset;"><br>

¡¡¡¡<input type="button" value="ɾ³ýÐÐ" onclick="grid.delRow();" style="display:block;border:1px outset;"><br>