treeView中CheckBox如何设置子节点Check属性计算机二级考试
文章作者 100test 发表时间 2009:05:13 17:43:36
来源 100Test.Com百考试题网
2009年下半年全国计算机等级考试你准备好了没?考计算机等级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库
Asp.net 2.0 中带有CheckBox的TreeView控件, 父节点CheckBox属性改了后如何修改其子节点的Check状态?
有两种方法:
一是PostBack回服务器端处理:
这种方法,每次PostBack都会刷新页面,同时展开收缩节点也会PostBack回去,刷新页面,用户体验很是不好。
首先在代码中注册属性:
this.TreeView1.Attributes.Add("onclick", "postBackByObject()").
设置TreeView1的属性:
OnTreeNodeCheckChanged="TreeNodeCheckChangeFunction"
JavaScript脚本如下所示:
<.script language="javascript">.
function postBackByObject()
{
var o = window.event.srcElement.
if (element.tagName == "INPUT" &.&. element.type == "checkbox")
{
__doPostBack("","").
}
}
<./script>.
然后在服务器段代码中对TreeView的Node子节点选中。
protected void TreeNodeCheckChangeFunction(object sender, TreeNodeEventArgs e)
{
SetChildChecked(e.Node).
}
第二种方法:注册javascript脚本事件,然后在客户端是JavaScript实现.用这种方法页面少了很多不必要Postback,减少服务器的负担。
设置TreeView1的属性:
EnableClientScript="true"
加入OnClick事件:
this.TreeView1.Attributes.Add("onclick", "postBackByObject()").
JavaScript的脚本,如下:
<.script language="javascript">.
function postBackByObject()
{
var element = window.event.srcElement.
if (element.tagName == "INPUT" &.&. element.type == "checkbox")
{
var checkedState = element.checked.
while (element.tagName != "TABLE")
element = element.parentElement.
UnCheck(element).
element = element.nextSibling.
if (element == null)
return.
var childTables = element.getElementsByTagName("TABLE").
for (var tableIndex = 0. tableIndex <. childTables.length. tableIndex )
Check(childTables[tableIndex], checkedState).
}
}
function UnCheck(table)
{
if (table == null || table.rows[0].cells.length == 2) // This is the root
return.
var parentTable = table.parentElement.previousSibling.
Check(parentTable, false).
UnCheck(parentTable).
}
function Check(table, checked)
{
var checkboxIndex = table.rows[0].cells.length - 1.
var cell = table.rows[0].cells[checkboxIndex].
var checkboxes = cell.getElementsByTagName("INPUT").
if (checkboxes.length == 1)
checkboxes[0].checked = checked.
}
<./script>.
同时最好给TreeNode的属性SelectAction 设置一下。
treeNode.SelectAction = TreeNodeSelectAction.None.
这样,整个有CheckBox的TreeView控件,基本上就不会有什么和服务器交互的情况了,获得更好的用户体验。
特别推荐:
2009年9月全国计算机等级考试时间及科目预告