📄 calculategrid.htc
字号:
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 + -