¡¡¡¡Õë¶Ô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>