标题:请教TreeView的问题
只看楼主
jiangkexi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-4-25
结帖率:0
已结贴  问题点数:20 回复次数:2 
请教TreeView的问题
左面是带checkbox的TreeView ,右边是Image,TreeView 的叶子节点的value保存了右边图片的路径,实现单击TreeView 的叶子节点右边图片显示相应的图片。

现在通过javascript已经实现了checkbox选中的方法,但是使用selectedchang事件的时候,javascript实现的checkbox选中方法又不起作用,求帮忙。
搜索更多相关主题的帖子: TreeView 
2010-04-25 18:03
jiangkexi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-4-25
得分:0 
javascript实现的checkbox选中方法的代码如下:

<script language="javascript" type="text/javascript">  
   
function postBackByObject()  
{  

  var element = window.event.srcElement;
  if(window.event.button==0)
   
  if (!IsCheckBox(element))  
  return;  
  var isChecked = element.checked;  
  var tree = TV2_GetTreeById("TreeView");  
  var node = TV2_GetNode(tree,element);  
   
  TV2_SetChildNodesCheckStatus(node,isChecked);  
  var parent = TV2_GetParentNode(tree,node);  
  TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);  
}  

//set child nodes checkbox status  
function TV2_SetChildNodesCheckStatus(node,isChecked)  
{  
var childNodes = TV2i_GetChildNodesDiv(node);  
if(childNodes == null)  
return;  

var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT");  
if(inputs == null || inputs.length == 0)  
return;  

for(var i = 0; i < inputs.length; i++)  
{  
if(IsCheckBox(inputs[i]))  
inputs[i].checked = isChecked;  
}  
}  

//change parent node checkbox status after child node changed  
function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked)  
{  
if(node == null)  
return;  

var childNodes = TV2_GetChildNodes(tree,node);  

if(childNodes == null || childNodes.length == 0)  
return;  

var isAllSame = true;  

for(var i = 0; i < childNodes.length; i++)  
{  
var item = childNodes[i];  
var value = TV2_NodeGetChecked(item);  

if(isChecked != value)  
{  
isAllSame = false;  
break;  
}  
}  

var parent = TV2_GetParentNode(tree,node);  
if(isAllSame)  
{  
TV2_NodeSetChecked(tree,node,isChecked);  
TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);  
}  
else  
{  
TV2_NodeSetChecked(tree,node,false);  
TV2_NodeOnChildNodeCheckedChanged(tree,parent,false);  
}  
}  

//get node relative element(etc. checkbox)  
function TV2_GetNode(tree,element)  
{  
var id = element.id.replace(tree.id,"");  
id = id.toLowerCase().replace(element.type,"");  
id = tree.id + id;  

var node = document.getElementById(id);  
if(node == null) //leaf node, no "A" node  
return element;  
return node;  
}  

//get parent node  
function TV2_GetParentNode(tree,node)  
{  
var div = WebForm_GetParentByTagName(node,"DIV");  

//The structure of node: <table>information of node</table><div>child nodes</div>  
var table = div.previousSibling;  
if(table == null)  
return null;  

return TV2i_GetNodeInElement(tree,table);  
}  

//get child nodes array  
function TV2_GetChildNodes(tree,node)  
{  
if(TV2_NodeIsLeaf(node))  
return null;  

var children = new Array();  
var div = TV2i_GetChildNodesDiv(node);  
var index = 0;  

for(var i = 0; i < div.childNodes.length; i++)  
{  
var element = div.childNodes[i];  
if(element.tagName != "TABLE")  
continue;  

var child = TV2i_GetNodeInElement(tree,element);  
if(child != null)  
children[index++] = child;  
}  
return children;  
}  

function TV2_NodeIsLeaf(node)  
{  
return !(node.tagName == "A"); //Todo  
}  

function TV2_NodeGetChecked(node)  
{  
var checkbox = TV2i_NodeGetCheckBox(node);  
return checkbox.checked;  
}  

//判断:只要该节点有一个字节点被选中,则该节点一定被选中  
function TV2_NodeSetChecked(tree,node,isChecked)  
{  
var checkbox = TV2i_NodeGetCheckBox(node);  
if(checkbox != null)  
{  
var childNodes = TV2_GetChildNodes(tree,node);  
for(var i = 0; i < childNodes.length; i++)  
{  
var item = childNodes[i];  
var value = TV2_NodeGetChecked(item);  
if(value)  
{  
isChecked = true ;  
break;  
}  
}  
checkbox.checked = isChecked;  
}  
}  

function IsCheckBox(element)  
{  
if(element == null)  
return false;  
return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox");  
}  
function Isselectnode(element)  
{  
if(element == null)  
return false;  
return (element.tagName == "A" && element.class =="TreeView_0" );  
}  
//get tree  
function TV2_GetTreeById(id)  
{  
return document.getElementById(id);  
}  

//////////////////////////////////////////////////////////////////////////////////////////////  
//private mothods, with TV2i_ prefix  
//////////////////////////////////////////////////////////////////////////////////////////////  

//get div contains child nodes  
function TV2i_GetChildNodesDiv(node)  
{  
if(TV2_NodeIsLeaf(node))
{
return null;  
}
var childNodsDivId = node.id + "Nodes";  
return document.getElementById( childNodsDivId );  
}  

//find node in element  
function TV2i_GetNodeInElement(tree,element)  
{  
var node = TV2i_GetNodeInElementA(tree,element);  
if(node == null)  
{  
node = TV2i_GetNodeInElementInput(tree,element);  
}  
return node;  
}  

//find "A" node  
function TV2i_GetNodeInElementA(tree,element)  
{  
var as = WebForm_GetElementsByTagName(element,"A");  
if(as== null || as.length == 0)  
return null;  

var regexp = new RegExp("^" + tree.id + "n\\d+$");  

for(var i = 0; i < as.length; i++)  
{  
if(as[i].id.match(regexp))  
{  
return as[i];  
}  
}  
return null;  
}  

//find "INPUT" node  
function TV2i_GetNodeInElementInput(tree,element)  
{  
var as = WebForm_GetElementsByTagName(element,"INPUT");  
if(as== null || as.length == 0)  
return null;  

var regexp = new RegExp("^" + tree.id + "n\\d+");  

for(var i = 0; i < as.length; i++)  
{  
if(as[i].id.match(regexp))  
{  
return as[i];  
}  
}  
return null;  
}  

//get checkbox of node  
function TV2i_NodeGetCheckBox(node)  
{  
if(IsCheckBox(node))  
return node;  

var id = node.id + "CheckBox";  
return document.getElementById(id);  
}


function SelectType_onchange() {
  if(SelectType.options(0).Text == "Calico")
  ;
}

</script>

服务器端代码
protected void Page_Load(object sender, EventArgs e)
  {
  if (!Page.IsPostBack)
  {
  TreeView.Attributes.Add("onclick", "postBackByObject()");
  if (Request.QueryString["BARCODE"] != null)
  {

  barcode = Request.QueryString["BARCODE"].ToString();
  //判断是否是自己发起的任务
  //disabledButton(Rid);
  Bind();
  }
  if (Request.QueryString["flag"] != null)
  {
  if (Request.QueryString["flag"].ToString() == "1")
  {
  VisibleBtn();
  }
  }
  }
  }
2010-04-25 18:06
misswang
Rank: 8Rank: 8
来 自:湖北荆州
等 级:贵宾
威 望:15
帖 子:265
专家分:720
注 册:2010-3-11
得分:20 
这么多,慢慢看

misswp2010@
wangping103@
2010-04-26 12:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-304380-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.627575 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved