⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculategrid.htc

📁 HTC,demo WEB用于。 超大型
💻 HTC
📖 第 1 页 / 共 5 页
字号:
            collTitleCells(i).childNodes(0).style.pixelWidth = vMax; //title's cell宽度
          }

          oTBody.scrollLeft = curScrollLeftStatus;//恢复滚动条位置
          oTBody.scrollTop = curScrollTopStatus;
        }catch(e){
          //错误丢弃
        }
      }

      function scrollIDL(){//左右滚动
      
        oTitleTable.style.marginLeft = - oTBody.scrollLeft;
        curScrollLeftStatus = oTBody.scrollLeft;
        curScrollTopStatus = oTBody.scrollTop;
        hideInput();
        
      }


      function createTitle(){ //生成DBGrid组件标题行,并用XML数据填充

        var vWidthTemp; //临时存储宽度

        oTitle = window.document.createElement("<div class='phms_grid_oTitle'></div>"); // 创建标题div对象

        if(oTitleTable) oTitleTable.removeNode(true); // 删除原有标题
        oTitleTable = null;

        oTitleTable = window.document.createElement("<table style='font-size:9pt;' border=0 cellspacing=1 cellpadding=0></table>");
        oTitleTable.bgcolor = dataBgColor;

        oTitleTR = oTitleTable.insertRow();
        oTitleTR.height = 20;
        oTitleTR.bgColor = titleBgColor;        
        oTitleTR.style.color = titleForeColor;

        var tmpWidth;   
        if(hasFixedCol == 1){ //插入固定列
          oTitleTD = oTitleTR.insertCell();
          oTitleInnerDiv = window.document.createElement("<div  class = 'phms_grid_oTitleInnerDiv'></div>");
          oTitleInnerDiv.innerText = " ";
          oTitleTD.appendChild(oTitleInnerDiv);
        }

        //插入title table单元格
        var visibleColsList = oTitleXML.selectNodes("/*/*[not(@visible = 'false')]"); //可以显示的列
        
        for(var i = 0; i < visibleColsList.length; i++){
          oTitleTD = oTitleTR.insertCell();
          oTitleTD.noWrap = "noWrap";
          oTitleInnerDiv = window.document.createElement("<div class='phms_grid_oTitleInnerDiv'></div>"); //创建用于撑宽TD的div

          if(hasFixedCol == 0) oTitleInnerDiv.style.left = 1;//调整标题与列偏差
          tmpWidth = visibleColsList(i).getAttribute("width") - 4;
          oTitleInnerDiv.style.pixelWidth = tmpWidth; //设置宽度
          oTitleInnerDiv.MinWidth = visibleColsList(i).getAttribute("minWidth");    //设置最小宽度
          if(oTitleInnerDiv.MinWidth == null) oTitleInnerDiv.MinWidth = tmpWidth;
          oTitleInnerDiv.MaxWidth = visibleColsList(i).getAttribute("maxWidth");  //设置最大宽度
          if(oTitleInnerDiv.MaxWidth == null) oTitleInnerDiv.MaxWidth = tmpWidth;       

          oTitleInnerDiv.rpropName = visibleColsList(i).getAttribute("rpropName"); //设置RPropName属性
          oTitleInnerDiv.innerText = visibleColsList(i).getAttribute("caption");    //表字段的标题        
          oTitleInnerDiv.EditType = visibleColsList(i).getAttribute("editType");    //编辑模式
          oTitleInnerDiv.DataType = visibleColsList(i).getAttribute("dataType");  //数据类型        
          oTitleInnerDiv.AllowSort = visibleColsList(i).getAttribute("allowSort");  //是否允许排序          
          //////////////////////2004-03-03/////////////////////
          oTitleInnerDiv.valueCol = visibleColsList(i).getAttribute("valueCol");//字典列value          
          oTitleInnerDiv.textCol = visibleColsList(i).getAttribute("textCol");//字典列text  
          oTitleInnerDiv.contain = visibleColsList(i).getAttribute("contain");//受本列影响的列  
          oTitleInnerDiv.formula = visibleColsList(i).getAttribute("formula");  //计算公式
          /////////////////////////////////////
          oTitleInnerDiv.onmousedown = clickTitle;
          oTitleInnerDiv.style.top = 2;

          oTitleTD.appendChild(oTitleInnerDiv);
          
          oArrayContain[oTitleInnerDiv.rpropName] = new curCellArray(oTitleInnerDiv.rpropName,oTitleInnerDiv.formula);
          
          if(allowResizeModle.toString() ==  "true" && i != 0) createSplitBar(oTitleInnerDiv); //除第一行外都生成SplitBar
        }
        //生成最后一个拖动span
        oTitleTD = oTitleTR.insertCell();
        oTitleInnerDiv = window.document.createElement("<div class='phms_grid_oTitleInnerDiv'></div>");
        oTitleInnerDiv.innerText = "                                                                                                                                                  ";//遮盖滚动条留出的空白        
        oTitleTD.appendChild(oTitleInnerDiv);
        createSplitBar(oTitleInnerDiv);

        oTitleTable = oTitle.appendChild(oTitleTable); //标题表格对象
        oTitle = element.appendChild(oTitle);
        if(hasTitle.toString() ==  "false")  oTitle.style.display = "none"; //是否有表头
        
      }
          

      function refresh(){//DBGrid组件位置、样式初始化
      
        with(element){//element定位
            style.top = top;
            style.left = left;
            style.width = width;
            style.height = height;
            style.borderColor = borderColor;
            onkeydown = keydownTBodyTable;
            onmousedown = lostFocus;
        }

        if(oTBody){
          with(oTBody){ //面板
            style.width = width;
            style.height = height;
          }
        }

        if(oTBody && oTitle){ //设置table div
          with(oTBody){
            style.pixelHeight = height - oTitle.offsetHeight;
          }
          with(oTitle){
            style.pixelWidth = width;
          }
        }
      }
      
      function clear(){//清空所有对象
        var objLeafElement;       
        //////////////////////////////////////////////////////////        
        
        oDataXML = null;//Table数据的XML对象
        objDeletedXMLFragement = null;//用来保存已经删除了的行      
        oCopyDataXML = null;//Table数据的XML对象的拷贝
        oPreviousRowXMLData = null;//双击时用来保存当前行XML数据对象
        oTitleXML = null;//Title数据的XML对象
        oControl = null;//控制面板容器对象      

        oTitle = null;//标题对象
        oTitleTable = null;//标题table对象
        oTitleTR = null;//标题行tr对象
        oTitleTD = null;//标题cell对象
        oTitleInnerDiv = null;//标题行 cell 中的 div 对象,用来撑开td
        

        oTBody = null;//内容所在容器对象
        oDataTable = null;//oTBody容器对象
        oTBodyTable = null;//内容table对象
        oTBodyTR = null;//内容tr对象
        oTBodyTD = null;//内容cell对象
        oFirstLineDiv = null;//第一行cell中的div对象,用来控制整个内容表的列宽
        vTableCol = -1;
        vTableRow = -1;//存储当前操作的cell
        vPreviousCol = -1;
        vPreviousRowForXML = -1;//存储上次操作的cell位置
        vPreviousRow = -1;
        vSelectionMode = "row";//选中方式(默认为单元格选中)
        vPKColName = "";

        allowResizeModle = true;//是否可以调整列宽

        vMouseStart =  0; //鼠标初始位置,当前活动splitbar

        bIsSelected = false;//单元格是否被选中        
        oSortBtn = null;//排序按钮

        curScrollLeftStatus = 0;//水平滚动条当前的scrollLeft
        curScrollTopStatus = 0;//垂直滚动条当前的scrollTop

        oEditor = null;//当前输入框
        oCurCell = null;//当前Cell
        curContent = null;//当前cell中的内容

        curPage = 1;//当前页
        oPageSize = 20;//每页显示的记录数,默认为20条
        
        arrCheckedRow = null;
        arrCheckedRow = new Array();
        
        ///////////////////////////////////////////////////////////
        
        while(element.all.length > 0){        
          if(element.all(element.all.length-1)){
            objLeafElement = element.all(element.all.length - 1);
            while(objLeafElement.childNodes.length > 0){
              objLeafElement = objLeafElement.childNodes(0);
            }//End of while
            if(objLeafElement.parentElement)
              objLeafElement.parentElement.removeChild(objLeafElement);
            if(objLeafElement.parentNode)
              objLeafElement.parentNode.removeChild(objLeafElement);  
            objLeafElement = null;          
          }//End of if  
        }//End of for
        
      }//End of clear
            
      function lostFocus(){//焦点消失/    
        window.document.attachEvent("onmousedown",clickDocument);    
      }

      function clickDocument(){//点击DBGrid以外的Document对象时隐藏当前活动的输入框 
    
        if(oEditor==null) return;
        var objSrc = window.event.srcElement;
        if(element.contains(objSrc)) return;
      
          window.document.detachEvent("onmousedown",clickDocument);
          oEditor.style.display = "none";
          ////////////////////////////
          oTBodyTable.rows(vPreviousRow).cells(vPreviousCol).style.color = "#000000"; 
          /////////////////////////////////
               
        }   

      function keydownTBodyTable(){//移动光标键进行cell或tr之间的移动

        var vKeyCode = window.event.keyCode;

        if(vKeyCode > 40 || vKeyCode < 37) return;
        if(vTableRow < 0 || vTableCol < 0) return; //当没有选中某一个cell时不能使用key 编辑
        switch(vKeyCode){
          case 37:  //左
            if(vSelectionMode != "row") selectTable(false); //如果是行选则左右方向键不改变外观,如果是单元格选择则恢复上次选择的单元格的样式
            if(vTableCol ==  0) tableCol = oTBodyTable.rows(0).cells.length - 1; //到达表格左端则返回右端
            else vTableCol--;
            if(vSelectionMode != "row") selectTable(true); 
            scrollRowToView(vTableRow,vTableCol);//移动当前行到可视范围
            showRC();
            evtClickCell.fire();
            break;
          case 38:  //上
            selectTable(false); 
            if(vTableRow ==  0) tableRow = oTBodyTable.rows.length - 1; //到达顶端返回底端
            else vTableRow--;
            selectTable(true); 
            scrollRowToView(vTableRow); //移动当前行到可视范围
            showRC();
            evtClickCell.fire();
            break;
          case 39:  //右
            if(vSelectionMode != "row") selectTable(false); // //恢复上次选择的单元格的样式
            if(vTableCol == oTBodyTable.rows(0).cells.length - 1) vTableCol = 0; //到达右端返回左端非fixedCols的第一列
            else vTableCol++;
            if(vSelectionMode != "row") selectTable(true); //选中经过key arrow键选中的cell或者row;
            scrollRowToView(vTableRow,vTableCol);//移动当前行到可视范围
            showRC();
            evtClickCell.fire();
            break;
          case 40:  //下
            selectTable(false); //恢复上次选择的单元格的样式
            if(vTableRow ==  oTBodyTable.rows.length - 1) tableRow = 0; //到达底端返回顶端
            else vTableRow++;
            selectTable(true); 
            scrollRowToView(vTableRow); //移动当前行到可视范围
            showRC();
            evtClickCell.fire();
            break;
        }
        window.event.returnValue = false;
      }


      function scrollRowToView(argRow,argCol){ //将当前行或者单元格滚动到table div的可视范围内(指定行未指定列可以滚动指定行,两者都指定才能滚动单元格,argCol指的是单元格的tableCol)
        var objRow,objCell;
        var vTemp;

        if(typeof(argRow) == "undefined") return; //至少需要argRow参数

        objRow = oTBodyTable.rows(argRow); //要移动的row
        if(objRow==null) return;
        vTemp = objRow.offsetTop - oTBody.scrollTop; //行顶部与body div的顶部之间的距离

        if(vTemp < 0){ //说明该行被藏于body div的上部
          oTBody.scrollTop += vTemp;
        }else{
          vTemp = objRow.offsetTop + objRow.offsetHeight - (oTBody.scrollTop + oTBody.offsetHeight); //行底部与body div底部之间的距离
          if(vTemp > 0){ //说明该行藏于body div的下部
            oTBody.scrollTop += vTemp + 16;//16为div滚动条的高度
          }
        }

        if(typeof(argCol) == "undefined") return; //两参数都指定才能给cell定位
        objCell = oTBodyTable.rows(argRow).cells(argCol); //要移动的cell

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -