//一段超晕的代码,实现树上结点的单选和复选的功能 //单击TreeView function treeview_onclick(e){ //获取单击TreeView控件treenode编号 var i=e.clickedNodeIndex; if(i==null){ return false; } var node =e.getTreeNode(i);
//获取原始状态 var checked; try{ checked= node.getAttribute("checked"); }catch(e){ checked=false; } //改变选择的按钮状态 checked = !checked; try{ node.setAttribute("checked",checked); } catch(e){ alert(e.description) } if(node.getAttribute("subtree")!=null){ var all=node.getAttribute("subtree").all; checksubtree(all,checked); } } var type=""; function checksubtree(all,checked){ for(i=0;i<all.length;i++){ if(all[i].type =="checkbox"){ all[i].checked = checked; setchecked(all[i],checked) type="checkbox"; } if(all[i].type=="radio") //radio类型需要单独处理 { if(type!="radio"){ all[i].checked = checked; setchecked(all[i],checked) type ="radio"; } else{ setchecked(all[i],false) type ="radio"; } } } type=""; } function setchecked(chk,checked){ //清除相同的选项 var hide = document.getElementById("hiddenField"); var checkedstr = hide.value; if(checkedstr.charAt(0)!=";") checkedstr += ";"; checkedstr=checkedstr.replace(";"+chk.id+";",";"); //如果类型为radio需要清除以前选择的记录 if((chk.type =="radio") &&(chk.checked)){ //radiobox编号规则为 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号 var i = chk.id.lastIndexOf("_"); var no = chk.id.substring(0,i+1);//like LA_LA01_001_
//通过;进行拆分,查找出以前选择的同类复选信息进行处理 var arr =checkedstr.split(";"); //重新对checkedstr进行赋值 checkedstr=";"; for(i=0;i<arr.length;i++){ if(arr[i] =="") continue;
void checkChilds(TreeNode node)
{
for(int i=0;i<node.Nodes.Count;i++)
{
TreeNode childNode = node.Nodes[i];
childNode.Checked = true;
if(childNode.Nodes.Count>0) checkChilds(childNode);
}
}
TreeNode tmpNode = 点击的节点
while(tmpNode != null)
{
tmpNode.Checked = true;
try
{
tmpNode = (TreeNode)tmpNode.Parent;
}
catch
{
tmpNode = null;
}
}
//单击TreeView
function treeview_onclick(e){
//获取单击TreeView控件treenode编号
var i=e.clickedNodeIndex;
if(i==null){
return false;
}
var node =e.getTreeNode(i);
//获取原始状态
var checked;
try{
checked= node.getAttribute("checked");
}catch(e){
checked=false;
}
//改变选择的按钮状态
checked = !checked;
try{
node.setAttribute("checked",checked);
}
catch(e){
alert(e.description)
}
if(node.getAttribute("subtree")!=null){
var all=node.getAttribute("subtree").all;
checksubtree(all,checked);
}
}
var type="";
function checksubtree(all,checked){
for(i=0;i<all.length;i++){
if(all[i].type =="checkbox"){
all[i].checked = checked;
setchecked(all[i],checked)
type="checkbox";
}
if(all[i].type=="radio") //radio类型需要单独处理
{
if(type!="radio"){
all[i].checked = checked;
setchecked(all[i],checked)
type ="radio";
}
else{
setchecked(all[i],false)
type ="radio";
}
}
}
type="";
}
function setchecked(chk,checked){
//清除相同的选项
var hide = document.getElementById("hiddenField");
var checkedstr = hide.value;
if(checkedstr.charAt(0)!=";")
checkedstr += ";";
checkedstr=checkedstr.replace(";"+chk.id+";",";");
//如果类型为radio需要清除以前选择的记录
if((chk.type =="radio") &&(chk.checked)){
//radiobox编号规则为 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号
var i = chk.id.lastIndexOf("_");
var no = chk.id.substring(0,i+1);//like LA_LA01_001_
//通过;进行拆分,查找出以前选择的同类复选信息进行处理
var arr =checkedstr.split(";");
//重新对checkedstr进行赋值
checkedstr=";";
for(i=0;i<arr.length;i++){
if(arr[i] =="")
continue;
if(arr[i].indexOf(no) =="-1"){ //表示不存在同时需要排除单选框的存在情况
checkedstr+=arr[i]+";";
}
}
}
if(checked){ //增加选择
checkedstr += chk.id+";";
}
hide.value =checkedstr;
}
{
tvAccAuxItem.SelectedNode = e.Node;
tvAccAuxItem.AfterCheck -= new TreeViewEventHandler(tvAccAuxItem_AfterCheck);
TreeNode node = new TreeNode();
bool flag = true;
node = tvAccAuxItem.SelectedNode;
if (tvAccAuxItem.SelectedNode.Checked == true)
{
//如果Checked为true,保证子节点的Checked都为true
if (tvAccAuxItem.SelectedNode.FirstNode != null)
{
node = tvAccAuxItem.SelectedNode.FirstNode;
while(flag)
{
node.Checked = true;
if (node.FirstNode != null)
node = node.FirstNode;
else if (node.NextNode != null)
node = node.NextNode;
else
while(flag)
{
if (node.Parent != tvAccAuxItem.SelectedNode)
{
node = node.Parent;
if (node.NextNode != null)
{
node = node.NextNode;
break;
}
}
else
{
flag = false;
}
}
}
} //望上迭归,保证子节点的Checkecd为true时,父节点的Checked的也为true.
node = tvAccAuxItem.SelectedNode;
while (true)
{
if (node.PrevNode != null)
node = node.PrevNode;
else
break;
}
while (true)
{
if (node.Parent != null)
{
if (node.NextNode != null && node.Checked == true)
{
node = node.NextNode;
}
else if (node.NextNode == null && node.Checked == true)
{
node = node.Parent;
node.Checked = true;
while(true)
{
if (node.PrevNode != null)
node = node.PrevNode;
else
break;
}
}
else
break;
}
else
break;
}
tvAccAuxItem.AfterCheck += new TreeViewEventHandler(tvAccAuxItem_AfterCheck);
return;
}
else
{
//保证上级节点的Checked都为false
if (tvAccAuxItem.SelectedNode.Parent != null)
{
while (true)
{
if (node.Parent != null)
{
node = node.Parent;
node.Checked = false;
}
else
{
break;
}
}
}
//保证下级节点的Checked都为false
if (tvAccAuxItem.SelectedNode.FirstNode != null)
{
flag = true;
node = tvAccAuxItem.SelectedNode.FirstNode;
while(flag)
{
node.Checked = false;
if (node.FirstNode != null)
node = node.FirstNode;
else if (node.NextNode != null)
node = node.NextNode;
else
while(flag)
{
if (node.Parent != tvAccAuxItem.SelectedNode)
{
node = node.Parent;
if (node.NextNode != null)
{
node = node.NextNode;
break;
}
}
else
{
flag = false;
}
}
}
}
}
tvAccAuxItem.AfterCheck += new TreeViewEventHandler(tvAccAuxItem_AfterCheck);
}