📄 flexgrid.htc
字号:
vXslt = "<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'><xsl:output method='xml' omit-xml-declaration='no' encoding='gb2312' version='1.0' indent='yes'/><xsl:template match='/'><root><xsl:for-each select='*/*[@__rowid != \"\"]'><xsl:sort select='format-number(@" + colName + ",\"00000.00000\")' order='" + order + "'/><xsl:copy-of select='.'/><xsl:copy-of select='@*'/></xsl:for-each><xsl:for-each select='*/*[@__rowid = \"\"]'><xsl:copy-of select='.'/><xsl:copy-of select='@*'/></xsl:for-each></root></xsl:template></xsl:stylesheet>";
}
oCopyDataXML = inputXML(__objGlobalCommonInst.transformXML(oCopyDataXML,vXslt)); //xml依据排序转换
fillInTable(); //填充表格
mergeCol();
}
function fillInTable(){ //生成FlexGrid组件数据表,用XML数据填充
var oXSLT = null;//XSLT对象
var vXslt = null;//xslt字符串
var vFirstRow = "";//第一行xslt
var vOtherRow = "";//其它行xslt
var vRowTemp = ""; //临时xslt
var vFixedCol = "";
var vTitleHTMLDOM;
var strRowIDS = "";//用来保存通过checkBox选中行的__rowid所组成的字符串
var rowCnt;
if(oTitleXML == null) return;
if(oTBody) oTBody.removeNode(true);//删除原有数据表容器
oTBody = null;
oTBody = window.document.createElement("<div class='phms_flexGrid_oTBody'></div>");
if(oTBodyTable) oTBodyTable.removeNode(true); //删除原有表格
oTBodyTable = null;
refresh();
//构造xslt
vXslt = "<xsl:stylesheet version = '1.0' xmlns:xsl = 'http://www.w3.org/1999/XSL/Transform'><xsl:output method = 'html'/><xsl:template match = '/'><table class='phms_flexGrid_oTBodyTable' bgcolor='"
+ dataBgColor + "' border = '0' cellspacing = '1' cellpadding = '0' vhinfo='tbody'><xsl:for-each select = '*/*'><xsl:choose><xsl:when test='position() = " + getFirstPosition() + "'><tr bgcolor='"
+ dataBgColor + "' height='18'><xsl:attribute name='__rowid'><xsl:value-of select='@__rowid'/></xsl:attribute>";
for(var i = parseInt(hasFixedCol); i < arrSortDiv.length; i++){ //获取列值
rowCnt = "<xsl:value-of select='position()'/>";//行位置
vFirstRow += "<xsl:if test='@" + arrSortDiv[i].rpropname + "'><td align='center' bDelete='n' rowSp='1' bgcolor='" + oddTRColor + "' rpropname='" + arrSortDiv[i].rpropname + "' dataType='" + arrSortDiv[i].dataType + "'><div style='height:100%;padding-top:4' id='" + arrSortDiv[i].id + "'><xsl:if test='@" + arrSortDiv[i].rpropname + "'><xsl:value-of select='@" + arrSortDiv[i].rpropname + "'/></xsl:if></div></td></xsl:if>";
vOtherRow += "<xsl:if test='@" + arrSortDiv[i].rpropname + "'><td align='center' bDelete='n' rowSp='1' rpropname='" + arrSortDiv[i].rpropname + "' dataType='" + arrSortDiv[i].dataType + "'><xsl:value-of select='@" + arrSortDiv[i].rpropname + "'/></td></xsl:if>";
}
if(parseInt(hasFixedCol) == 1){ //生成fixed col xslt
vFixedCol = "<td class='phms_flexGrid_index' align='" + fixedColAlign + "' style='padding-top:4;color:" + fixedColForeColor + "; background:" + fixedColBGColor + ";";
vFirstRow = vFixedCol + "'><div class = 'phms_grid_indexDiv' id='" + arrSortDiv[0].id + "'><font face='arial' size='1'><xsl:value-of select='position()'/></font></div></td>" + vFirstRow;
vOtherRow = vFixedCol + "'><font face='arial' size='1'>" + rowCnt + "</font></td>" + vOtherRow;
}
vXslt += vFirstRow + "</tr></xsl:when><xsl:otherwise><xsl:choose><xsl:when test='position() >=" + getFirstPosition() + " and position() <=" + getLastPosition() + "'><tr><xsl:attribute name='__rowid'><xsl:value-of select='@__rowid'/></xsl:attribute><xsl:if test='position() mod 2 = 0'><xsl:attribute name='bgcolor'>"
+ evenTRColor + "</xsl:attribute></xsl:if><xsl:if test='position() mod 2 != 0'><xsl:attribute name='bgcolor'>" + oddTRColor + "</xsl:attribute></xsl:if>" + vOtherRow + "</tr></xsl:when></xsl:choose></xsl:otherwise></xsl:choose></xsl:for-each></table></xsl:template></xsl:stylesheet>";
if(oCopyDataXML == null) return;
// window.prompt("",__objGlobalCommonInst.transformXML(oCopyDataXML,vXslt));
oTBody.insertAdjacentHTML("afterBegin",__objGlobalCommonInst.transformXML(oCopyDataXML,vXslt)); //插入转换后的HTML
vReportDataTableInnerHTML = __objGlobalCommonInst.transformXML(oCopyDataXML,vXslt);
oTBodyTable = oTBody.childNodes(0); //数据表格对象
oTBodyTable.onclick = clickTable;
oTBody = oDataTable.insertAdjacentElement("beforeEnd",oTBody);
oTBody.onscroll = scrollIDL; //左右滚动事件绑定
///////////////
if( booleanHasTotalLine ){//合计行
var objTRList = oTBody.all.tags("TR");
for( var i = (objTRList.length - 1); i > 0; i -- ){
if( objTRList[i].__rowid == ""){
objTRList[i].style.color = "black";
objTRList[i].style.fontWeight = "bold";
objTRList[i].style.background = "#eeeeee";
objTRList[i].height = "18";;
for( var j = 0; j < objTRList[i].children.length; j ++ ){
if( objTRList[i].children[j].innerText == "" ){
objTRList[i].children[j].innerText = (isNaN(parseInt(objTRList[0].children[j].firstChild.innerText))) ? "" : 0;
}
}
break;
}
}
}
///////////////////////////
////增加checkBox//2005-7-14 hzh//////////////////////////////////////////////////////////////////////////
if(parseInt(hasFixedCol) != 1) intFirstColIndex = 0;
if(booleanHasCheckBox && oTitleTable){
var objInputList = oTitle.all.tags("input");
if(objInputList.length){
objInputList[0].parentElement.parentElement.removeChild(objInputList[0].parentElement);
}
var objTempTD = null;
//处理表头展现
objTempTD = window.document.createElement("<td>");
objTempTD.innerHTML = "<input style='font-size:1pt;width:14;height:14;visibility:hidden' type='checkbox' idx='0' title='select all or not'>";
objTempTD.firstChild.onclick = processCheckBoxClickEnent;
objTempTD.rowSpan = oTitleTable.rows[0].cells[0].rowSpan;
objTempTD.style.width = 19;
objTempTD.style.background = "#CAEAFF";
oTitleTable.rows[0].cells[intFirstColIndex].insertAdjacentElement("beforeBegin",objTempTD);
//处理数据表展现
var objDataTable = oTBody.firstChild;
for( var i = 0; i < objDataTable.rows.length; i ++ ){
objTempTD = window.document.createElement("<td bgcolor='#eeeeee'>");
if(objDataTable.rows[i].__rowid != ""){
objTempTD.innerHTML = "<input type='checkbox' idx='1'>";
objTempTD.firstChild.onclick = processCheckBoxClickEnent;
}
objDataTable.rows[i].cells[intFirstColIndex].insertAdjacentElement("beforeBegin",objTempTD);
}
//恢复选择
for( var i = 0; i < objDataTable.rows.length; i ++ ){
for( var j = 0; j < objArrSelectRowIdx.length; j ++ ){
if(objDataTable.rows[i].__rowid == objArrSelectRowIdx[j] ){
objDataTable.rows[i].cells[intFirstColIndex].firstChild.checked = true;
setSelectRowBgcolor(objDataTable.rows[i],true);
break;
}
}
}
}
////checkBox结束///////////////////////////////////////////////////////////////////////////////////////
adjustGridWidth(parseInt(hasFixedCol));
}
////////////////checkBox增加事件处理////////////
function processCheckBoxClickEnent(){
var objSrc = event.srcElement;
if(objSrc.tagName.toLowerCase() == "input"){
switch(objSrc.idx){
case "0"://表头
var objCheckBoxList = oTBody.all.tags("input");
for( var i = 0; i < objCheckBoxList.length; i ++ ){
if( objSrc.checked ){
objCheckBoxList[i].checked = true;
setSelectRowBgcolor(objCheckBoxList[i].parentElement.parentElement,true);
}else{
objCheckBoxList[i].checked = false;
setSelectRowBgcolor(objCheckBoxList[i].parentElement.parentElement,false);
}
}
break;
case "1"://数据表
objSrc.checked ? setSelectRowBgcolor(objSrc.parentElement.parentElement,true) : setSelectRowBgcolor(objSrc.parentElement.parentElement,false);
break;
}
}
}
function setSelectRowBgcolor(objRow,setFlag){//用来设置行背景
if(objRow.tagName.toLowerCase() == "tr"){
for(var i = 2; i < objRow.cells.length; i ++ ){
if(setFlag){//选则
objRow.cells[i].style.background = selectBgColor;
objRow.cells[i].style.color = selectForeColor;
if(!inSelectedArray(objRow.__rowid)){
objArrSelectRowIdx.push(objRow.__rowid);
}
}else{//取消选择
objRow.cells[i].style.background = ( parseInt(objRow.rowIndex) % 2 == 0 ) ? evenTRColor : oddTRColor;
objRow.cells[i].style.color = "black";
removeFromArr(objRow.__rowid);
}
}
}
}
function inSelectedArray(rowid){//指定的id是否在队列中
var booleanReturn = false;
for( var i = 0; i < objArrSelectRowIdx.length; i ++ ){
if(objArrSelectRowIdx[i] == rowid){
booleanReturn = true;
break;
}
}
return booleanReturn;
}
function removeFromArr(rowid){//将指定id的item从队列中删除
var objTempArr = new Array();
if(inSelectedArray(rowid)){//在队列中
for(var i = 0; i < objArrSelectRowIdx.length; i ++ ){
if(objArrSelectRowIdx[i] != rowid){
objTempArr.push(objArrSelectRowIdx[i]);
}
}
while(objArrSelectRowIdx.length){
objArrSelectRowIdx.pop();
}
objArrSelectRowIdx = objTempArr;
}
}
function getSelectedXMLRow(){//返回按titleXML顺序的r节点
if(booleanHasCheckBox){//多选处理
if(oCopyDataXML && oCopyDataXML.xml){
var strSelectedRowXML = "";
for( var i = 0; i < objArrSelectRowIdx.length; i ++ ){
objTempRNode = oCopyDataXML.selectSingleNode("//r[@__rowid = '" + objArrSelectRowIdx[i] + "']");
if( objTempRNode && objTempRNode.xml ){
strSelectedRowXML += objTempRNode.xml;
}
}
strSelectedRowXML = "<root>" + strSelectedRowXML + "</root>";
return __objGlobalCommonInst.inputXML(strSelectedRowXML);
}else{
return null;
}
}else{
return (oCopyDataXML && oCopyDataXML.xml && tableRow !=-1) ? oCopyDataXML.selectSingleNode("//r[@__rowid='" + oTBodyTable.rows(tableRow).__rowid + "']") : null;
}
}
///////checkBox增加事件处理结束/////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
function enableAction(argBool){ //是否可动作
if(argBool){
for(var i = 0; i < oTitleTable.all.tags("DIV").length; i++){
oTitleTable.all.tags("DIV")(i).parentElement.onmousedown = clickTitle; //点击title cells 排序
oTitleTable.all.tags("DIV")(i).onmousedown = clickTitle; //点击title cells 排序
}
}else{
if(oTBodyTable){
with(oTBodyTable){
}
}
if(oTitleTable) oTitleTable.onmousedown = null;
}
}
function putMerge(mergeCells){ //合并data table
switch(mergeCells){
case "never": //不合并
enableAction(true);
break;
case "col": //限制列合并
enableAction(false);
mergeCol();
break;
}
}
function mergeCol(){ //限制列合并,列数不允许改变,合并列上的行
var i,j,m;
var arrMCol = new Array();
var boolCanntMerge = false;
if(!mergeColNumber) return(-1);
arrMCol = mergeColNumber.split(",");
if(mergeColNumber){//设置了mergeColNumber
//设置限制列合并的删除标志及跨行数量
for(i = 0; i < oTBodyTable.rows.length-1; i++){ //到倒数第二行结束,因为最后一行不需要向下寻找同值的单元格了
for(j = 0; j<arrMCol.length; j++){ //取出一个单元格
if(oTBodyTable.rows[i].cells[arrMCol[j]].bDelete == "y") continue;
for(m = i+1; m<oTBodyTable.rows.length; m++){
if(oTBodyTable.rows[i].cells[arrMCol[j]].innerText == oTBodyTable.rows[m].cells[arrMCol[j]].innerText){
for(var x = j; x >= 0; x--){
if(oTBodyTable.rows[i].cells[arrMCol[x]].innerText != oTBodyTable.rows[m].cells[arrMCol[x]].innerText){
boolCanntMerge = true;
break;
}//End of if
}//End of for
if(!boolCanntMerge){
oTBodyTable.rows[i].cells[arrMCol[j]].rowSp = parseInt(oTBodyTable.rows[i].cells[arrMCol[j]].rowSp)+1;
oTBodyTable.rows[m].cells[arrMCol[j]].bDelete = "y";
}
boolCanntMerge = false;
}else break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -