📄 calculategrid.htc
字号:
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 = window.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 = window.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(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;
oDivPageFooter = window.document.createElement("<div/>");
if(!oTBody) return(-1);
oDivPageFooter = oTBody.insertAdjacentElement("beforeEnd", oDivPageFooter);
oTabPageFooter = window.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 = window.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).formula){
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).formula) + '\"/><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(){//分页控制器
oControl = window.document.createElement("<div></div>");
oControl.runtimeStyle.width = width;
oControl = element.appendChild(oControl);
oControl.insertAdjacentHTML("afterBegin","<div class='phms_dbgrid_controller'> 当前页:<phms:maskedit dataType='phms_Number' init='1' width='30' left='50' top='1' height='16'/> 每页<phms:maskedit dataType='phms_Number' init='1' width='50' left='125' top='1' height='16'/> 条 共<input class='phms_dbgrid_input_short' readonly/>条 <input class='phms_dbgrid_input_RC' readonly/><input class='phms_dbgrid_input_RC' readonly/> <button class='phms_dbgrid_button'>首页</button> <button class='phms_dbgrid_button'>上页</button> <button class='phms_dbgrid_button'>下页</button> <button class='phms_dbgrid_button'>尾页</button> <button class='phms_dbgrid_button'>增加</button> <button class='phms_dbgrid_button'>删除</button></div>");
oTemp = oControl.children(0);
oControl.curPage = oTemp.children(0);//当前页
oControl.pageSize = oTemp.children(1);//每页显示记录数
oControl.pageSize.onfocus = hideInput;
oControl.recordCount = oTemp.children(2);//记录总数
oControl.recordCount.onfocus = hideInput;
oControl.firstPage = oTemp.children(5);//首页
oControl.previousPage = oTemp.children(6);//上一页
oControl.nextPage = oTemp.children(7);//下一页
oControl.lastPage = oTemp.children(8);//尾页
oControl.addR = oTemp.children(9);//增加r行
oControl.delR = oTemp.children(10);//删除r行
oControl.curRow = oTemp.children(3);//当前行
oControl.curCol = oTemp.children(4);//当前列
if(hasAddButton == "false"){//是否显示增加按钮
oControl.addR.style.visibility = "hidden";
}else{
oControl.addR.onclick = addRow;
}
if(hasDelButton == "false"){//是否显示删除按钮
oControl.delR.style.visibility = "hidden";
}else{
oControl.delR.onclick = delRow;
}
oTemp.style.background = controllerBgColor;
oControl.recordCount.style.background = controllerBgColor;
oControl.curRow.style.background = controllerBgColor;
oControl.curCol.style.background = controllerBgColor;
//事件绑定
oControl.firstPage.onclick = moveFirst;
oControl.previousPage.onclick = movePrevious;
oControl.nextPage.onclick = moveNext;
oControl.lastPage.onclick = moveLast;
//页面加载时需要初始化的一些参数
oControl.pageSize.text = oPageSize;//每页显示记录数
oControl.curPage.text = curPage;//当前页
oControl.curPage.onkeydown = gotoPage;//当输入页号后回车后转到相关页面
oControl.pageSize.onkeydown = refreshPageSize;//当输入pageSize后回车后重画页面
oControl.recordCount.value = intRows; //记录总数
}
///////////////////////////////以下是分页控制代码////////////////////////////////////////////////////////
function gotoPage(){//转向指定页面
if(event.keyCode == "13"){//按下了回车键
var tmpPage =parseInt(event.srcElement.value);//event.srcElement其实是input
if(isNaN(tmpPage)){
oControl.curPage.verify();//调用行为方法触发maskedit的onblur事件
event.srcElement.select();
return;
}
if(tmpPage<1 || tmpPage>getPageNumber()){//页码范围不正确
alert("页码输入有误(有效范围:1 - " + getPageNumber() + ")");
event.srcElement.select();
}else{//此处为重定向页面代码
curPage = tmpPage;//将当前页设置为输入的页码
fillInTable();
/*
if(hasPageFooter == "true")
viewPageFooter();
*/
}
if(curPage==1){//如果是第一页则使首页和上一页按钮失效,同时使最后一页则使尾页和下一页按钮有效
oControl.firstPage.disabled = true;
oControl.previousPage.disabled = true;
oControl.lastPage.disabled = false;
oControl.nextPage.disabled = false;
}
if(curPage==getPageNumber()){//如果是最后一页则使尾页和下一页按钮失效,同时使首页和上一页按钮有效
oControl.lastPage.disabled = true;
oControl.nextPage.disabled = true;
oControl.firstPage.disabled = false;
oControl.previousPage.disabled = false;
}
if(curPage>1 && curPage<getPageNumber()){//如果界于第一页和最后一页之间则使所有按钮有效
oControl.lastPage.disabled = false;
oControl.nextPage.disabled = false;
oControl.firstPage.disabled = false;
oControl.previousPage.disabled = false;
}
}
}
function refreshPageSize(){//按指定每页记录数显示记录
if(event.keyCode == "13"){//按下了回车
var tmpPageSize = parseInt(event.srcElement.value);
if(isNaN(tmpPageSize)){
oControl.pageSize.verify();//调用行为方法触发maskedit的onblur事件
event.srcElement.select();
return;
}
if(tmpPageSize<1 || tmpPageSize>intRows){//pageSize设置错误
alert("每页显示记录设置错误(有效范围:1 - " + intRows + ")");
event.srcElement.select();
}else{//此处为进行重画页面的代码
tableRow = 0;//设置第一行为当前行
showRC();//刷新行列坐标
curPage = 1;
oControl.curPage.text = curPage;
oPageSize = tmpPageSize;//将pageSize设置为输入的显示大小
fillInTable();
/*
if(hasPageFooter == "true")
viewPageFooter();
*/
}
oControl.firstPage.disabled = true;
oControl.previousPage.disabled = true;
oControl.lastPage.disabled = false;
oControl.nextPage.disabled = false;
}
}
function getRows(){ //得到数据总的行数
intRows = oCopyDataXML.selectNodes("/*/*").length;
}
function getCols(){ //得到数据区的列数
return (oTitleTable.rows(0).cells.length - 1);
}
function getPageNumber(){//获得总页数
return Math.ceil(intRows/oPageSize);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -