📄 xtdbgrid.htc
字号:
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){
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 for
}//End of clear
function lostFocus(){//焦点消失/
window.document.attachEvent("onmousedown",clickDocument);
}
function clickDocument(){//点击DBGrid以外的Document对象时隐藏当前活动的输入框
if(oEditor==null) return;
if(funVerifyInputWhenBlur() == -1){
return(-1);
}
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
if(objCell==null) return;
vTemp = objCell.offsetLeft - oTBody.scrollLeft; //cell左侧与body div的顶部之间的距离
if(vTemp < 0){ //说明该行被藏于panel div的左侧
if(argCol == 0) oTBody.scrollLeft = 0;
else oTBody.scrollLeft += vTemp;
}else{
vTemp = objCell.offsetLeft + objCell.offsetWidth - (oTBody.scrollLeft + oTBody.offsetWidth); //cell右侧与Panel div右部之间的距离
if(vTemp > 0){ //说明该行藏于panel div的右侧
oTBody.scrollLeft += vTemp + 16;//16为div滚动条的宽度
}
}
}
function initialize(){ //DBGrid组件初始化操作
//alert("init");
initGlobalCommon();
vTableCol = -1;
vTableRow = -1;
if(!oTitleXML) return(-1);
getCopyDataXML();//获得增加了clientAct="k"属性的oCopyDataXML拷贝oCopyDataXML对象
createTitle(); //创建oTitleTable
oDataTable = element.document.createElement("<div/>");//建立数据表格的容器
oDataTable = element.appendChild(oDataTable);
fillInTable(); //用XML数据填充表并显示
if(hasController=="true" && oControl==null)
viewController();
if(hasPageFooter == "true")//是否显示页脚行
viewPageFooter();
refresh();//DBGrid组件位置样式初始化
if(oTitle && oTBody){
oSortBtn = element.document.createElement("<span class='phms_sortBtnSpan'></span>");
oSortBtn.innerHTML = "<v:polyline points='0,6 4,0 8,6 0,6' class='phms_sortBtn' fillcolor='black' strokcolor='red'/><?xml:namespace prefix='v' urn='schemas-microsoft-com:vml'/>";
}
element.runtimeStyle.visibility = "visible";
//adjustGridWidth(0);
createEditor(); //创建编辑组件对象
if(hasController=="true" && oControl!=null){
oControl.firstPage.disabled = true;
oControl.previousPage.disabled = true;
if(intRows <= oPageSize){//如果记录总数小于每页显示记录数则使下一页和最后一页按钮也失效
oControl.nextPage.disabled = true;
oControl.lastPage.disabled = true;
}
}
if(oDataXML!=null) objDeletedXMLFragement = inputXML();
}
function initGlobalCommon(){//初始化__objGlobalCommonInst
if(!element.document.parentWindow.__objGlobalCommonInst){//如果还没有初始化
var oWindow;
oWindow = element.document.parentWindow;
oWindow.__objGlobalCommonInst = oWindow.parent.__objGlobalCommonInst;
__objGlobalCommonInst = oWindow.__objGlobalCommonInst;
}
}
function getCellText(argRow,argCol){ //根据指定的表格行列值得到指定单元格的内容
var vRow = parseInt(argRow);
var vCol = parseInt(argCol); //传递的应该是相对地址而不是table的绝对地址
if(vRow > oTBodyTable.rows.length - 1 || vRow < 0) return null;
if(vCol > oTBodyTable.rows(0).cells.length - 1 || vCol < 0) return null;
return oTBodyTable.rows(vRow).cells(vCol).innerText;
}
function strSplit(aimStr){//返回装配好的calculateCol为XSLT统计转换串
var s;
var tmpStr = "sum(//r/";
s = aimStr.split("+");
for(var i=0; i<s.length; i++){
if(i!= s.length -1){
tmpStr += s[i] + ") + sum(//r/";
}else{
tmpStr += s[i] + ")";
}
}
return tmpStr;
}
function viewPageFooter(){//页脚控制器
var objDivFPC;
var objCellFPC;
var intResult;
if(!oTBodyTable.rows(0)) return(-1);
oDivPageFooter = element.document.createElement("<div/>");
if(!oTBody) return(-1);
oDivPageFooter = oTBody.insertAdjacentElement("beforeEnd", oDivPageFooter);
oTabPageFooter = element.document.createElement("<table cellspacing='1' cellpadding='0' border='0' class='phms_grid_oTBodyTable'></table>");
oTabPageFooter.insertRow();
for(var i = 0; i < oTBodyTable.rows(0).cells.length; i++){
objDivFPC = element.document.createElement("<div class='phms_grid_oFirstLineDiv'></div>");
objCellFPC = oTabPageFooter.rows(0).insertCell();
objCellFPC.align = "center";
objDivFPC = objCellFPC.insertAdjacentElement("beforeEnd", objDivFPC);
objDivFPC.style.background = "#dddddd";
objDivFPC.style.pixelWidth = oTabPageFooter.rows(0).cells(i).childNodes(0).offsetWidth;
objDivFPC.style.pixelHeight = oTabPageFooter.rows(0).cells(i).childNodes(0).offsetHeight;
if(oTitleTable.rows(0).cells(i).childNodes(0).calculateCol){
intResult = __objGlobalCommonInst.transformXML(oCopyDataXML, '<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fo=\"http://www.w3.org/1999/XSL/Format\"><xsl:variable name=\"vSum\" select=\"' + strSplit(oTitleTable.rows(0).cells(i).childNodes(0).calculateCol) + '\"/><xsl:template match=\"/\"><xsl:value-of select=\"$vSum\"/></xsl:template></xsl:stylesheet>').replace('<?xml version=\"1.0\" encoding=\"UTF-16\"?>', "");
}else{
intResult = __objGlobalCommonInst.transformXML(oCopyDataXML, '<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fo=\"http://www.w3.org/1999/XSL/Format\"><xsl:variable name=\"vSum\" select=\"sum(//r/@' + oTitleTable.rows(0).cells(i).childNodes(0).rpropname + ')\"/><xsl:template match=\"/\"><xsl:value-of select=\"$vSum\"/></xsl:template></xsl:stylesheet>').replace('<?xml version=\"1.0\" encoding=\"UTF-16\"?>', "");
}
if(intResult == "NaN"){//无法进行统计的列
objDivFPC.innerText = "";
}else{
objDivFPC.innerText = intResult;
}
with(objDivFPC){
if(i==0 && hasFixedCol=="1"){//显示索引列并且是第一行
style.width = oTBodyTable.rows(0).cells(i).offsetWidth;
innerText = "合计";
}else{
style.width = oTBodyTable.rows(0).cells(i).offsetWidth;
}
}
}
oTabPageFooter = oDivPageFooter.insertAdjacentElement("beforeEnd", oTabPageFooter);
}
function viewController(){//分页控制器
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -