C#中的TreeView的Check选中问题
TreeView如何实现 这样的功能1.选中父节点 子节点全部选中
2.选中部分子节点 父节点是方框选中 半选中
3.选中全部子节点 父节点选中
就像Windows一样
--------------------编程问答--------------------
function OnTreeNodeChecked()--------------------编程问答-------------------- 不好意思,帮不上忙,还没试过半选中 --------------------编程问答-------------------- 这个 我原来的项目中用到过。
{
var ele = event.srcElement;
if(ele.type=='checkbox')
{
var childrenDivID = ele.id.replace('CheckBox','Nodes');
var div = document.getElementById(childrenDivID);
if(div==null)
return;
var checkBoxs = div.getElementsByTagName('INPUT');
for(var i=0;i<checkBoxs.length;i++)
{
if(checkBoxs[i].type=='checkbox')
checkBoxs[i].checked=ele.checked;
}
if(ele.parentNode.parentNode.parentNode.parentNode.parentNode.id=='<%=TreeUser.ClientID%>')
{
if(current==null)
{
current=ele;
}
else
{
current.checked=false;
childrenDivID = current.id.replace('CheckBox','Nodes');
div = document.getElementById(childrenDivID);
if(div!=null)
{
checkBoxs = div.getElementsByTagName('INPUT');
for(var i=0;i<checkBoxs.length;i++)
{
if(checkBoxs[i].type=='checkbox')
checkBoxs[i].checked=false;
}
}
if(current==ele)
{
current=null;
}
else
{
current=ele;
}
}
}
}
}
我找找 给你复制下 --------------------编程问答-------------------- 有半选中 那就不能用 自带的Checkbox了
可以在几点前面加图片 没选中 图片 选中 图片 半选中 图片
根据不同的情况换图片 --------------------编程问答--------------------
大哥 找到没 我还是不知道如何半选中
谢谢 --------------------编程问答-------------------- 这个估计得自己写控件了,因为treeview的复选样式就两种状态,不像checkedlistbox有三种 --------------------编程问答-------------------- 关注一下 --------------------编程问答-------------------- 使用checkstate 给checkbox赋值,有三种状态。
选中 checked
不选中 unchecked
不确定 interminate(类似这个名字)--你要求的半选中。 --------------------编程问答-------------------- 关注 呵呵 --------------------编程问答-------------------- 不好意思,看错题目了。
这个问题我的解决办法是 给treeviwe的imagelist添加3个分别表示三个状态的image
通过设置 选择的image来表示其选中状态。 --------------------编程问答--------------------
--------------------编程问答-------------------- 半选中只能用其他控件 treeview 没有半选中状态! --------------------编程问答-------------------- --------------------编程问答-------------------- function postBackObject() {
//改变所有子节点的状态
public static void CheckAllChildNodes(TreeNode pn, bool IsChecked)
{
foreach (TreeNode tn in pn.Nodes)
{
tn.Checked = IsChecked;
if (tn.Nodes.Count > 0)
{
CheckAllChildNodes(tn, IsChecked);
}
}
}
//改变父节点的选中状态
public static void CheckParentNode(TreeNode curNode, bool IsChecked)
{
bool bChecked = true;
if (curNode.Parent != null)
{
foreach (TreeNode node in curNode.Parent.Nodes)
{
if (node.Checked == false)
{
bChecked = false;
break;
}
}
if (bChecked)
{
curNode.Parent.Checked = true;
CheckParentNode(curNode.Parent, true);
}
else
{
curNode.Parent.Checked = false;
CheckParentNode(curNode.Parent, false);
}
}
}
var o = window.event.srcElement;
if (o.tagName == "INPUT" && o.type == "checkbox") {//点击treeview的checkbox是否触发
var d = o.id; //获得当前checkbox的id
var e = d.replace("CheckBox", "Nodes"); //通过查看脚本信息,获得包含所有子节点的div的id
var div = window.document.getElementById(e); //获得div对象
if (div != null) {//如果不为空,表示存在子节点
var check = div.getElementsByTagName("INPUT"); //获得div中所有的已input开始的标记
for (i = 0; i < check.length; i++) {
if (check[i].type == "checkbox") {
check[i].checked = o.checked; //子节点和父节点的状态一致,即全选
}
}
} else {//点击子节点的时候,是父节点的状态改变,即不为全选
var divid = o.parentElement.parentElement.parentElement.parentElement.parentElement; //子节点所在的div
var id = divid.id.replace("Nodes", "CheckBox"); //获得根节点的id
var checkbox = divid.getElementsByTagName("INPUT"); //获得所有子节点数
var s = 0;
for (i = 0; i < checkbox.length; i++) {
if (checkbox[i].checked) {
s++;
}
}
if (s == checkbox.length) {//如果全部选中或选择的是另外一个根节点的子节点,
window.document.getElementById(id).checked = true; //则开始的根节点仍为选中状态
} else {
window.document.getElementById(id).checked = false;
}
}
}
}
额,没有半选中的 --------------------编程问答-------------------- 做三种状态图片控件 然后传值判断
补充:.NET技术 , C#