日期:2014-05-17  浏览次数:21067 次

DevExpress.XtraTreeList如何添加右键功能,checkedit不全部显示
在学习使用dev的treelist第三方控件,在控件中添加了CheckEdit列
想找个人解答下:
1.现在是所有节点都显示CheckEdit,我不想父节点显示CheckEdit,或者有选择部分节点显示CheckEdit。
2.上面不能实现的话,那可否部分节点的CheckEdit不可点击或设置enabled为false。
3.如何添加右击菜单,从而达到动态添加节点。
求教各位高手了!!!!!!

------解决方案--------------------
右键菜单你用contextMenuStrip做就可以了;
TreeList不能单节点设置不可用,不过可以用一下方式实现根据子节点的状态控制状态或控制所有子节点状态
private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
{
if (e.Node == null) return;
System.Data.DataRowView rov = treeList1.GetDataRecordByNode(e.Node) as System.Data.DataRowView;
if (e.Node.CheckState == CheckState.Indeterminate)
{
e.Node.CheckState = CheckState.Checked;
}
if (e.Node.CheckState == CheckState.Checked)
{
if (e.Node.HasChildren)
{
CheckNode(e.Node);
}
ValidParentIsChecked(e.Node);
}
else if (e.Node.CheckState == CheckState.Unchecked)
{
if (e.Node.HasChildren)
{
ClearNode(e.Node);
}
//从根节点往下 查询 是否有打钩的子节点,如果有那么 父节点的 半选状态不变否则变为 不选择状态
ValidParentNodeIsCanleSel(e.Node);
}
}


private void CheckNode(DevExpress.XtraTreeList.Nodes.TreeListNode node)
{
foreach (DevExpress.XtraTreeList.Nodes.TreeListNode cnode in node.Nodes)
{
if (cnode != null)
{
cnode.CheckState = CheckState.Checked;
}
if (cnode.HasChildren)
{
CheckNode(cnode);
}
}
}

void ClearNode(DevExpress.XtraTreeList.Nodes.TreeListNode node)
{
foreach (DevExpress.XtraTreeList.Nodes.TreeListNode cnode in node.Nodes)
{
if (cnode != null)
{
cnode.CheckState = CheckState.Unchecked;
ClearNode(cnode);
}
}
}


private void ValidParentIsChecked(DevExpress.XtraTreeList.Nodes.TreeListNode node)
{
if (node.ParentNode != null)
{

if (node.ParentNode.CheckState != CheckState.Checked)
node.ParentNode.CheckState = CheckState.Indeterminate;
ValidParentIsChecked(node.ParentNode);
}
}

private void ValidParentNodeIsCanleSel(DevExpress.XtraTreeList.Nodes.TreeListNode node)
{
bool isSel = false;
if (node.ParentNode != null)
{
if (node.ParentNode.CheckState != CheckState.Unchecked)
{//如果父节点的 状态为 半选 状态 这 更具父节点 判断子节点是否打钩
isSel = ValidIsHasCheckChildNode(node.ParentNode);
if (isSel == false)
{//如果所有的 子节点 都没有 “选中”那么 父节点的状态 变为 非选中状态
node.ParentNode.CheckState = CheckState.Unchecked;
}
if (isSel)
{
bool isunsel = ValidIsHasUnCheckChildNode(node.ParentNode);
node.ParentNode.CheckState = CheckState.Indeterminate;
}
}
ValidParentNodeIsCanleSel(node.ParentNode);
}
}
/// <summary>
///