实现点击目录树全部展开与全部折叠的目的,假如没展开则点击一下全部展开,假如已经展开则全部折叠.
if (e.Node.IsExpanded) e.Node.Collapse(); else e.Node.ExpandAll();/*判断是否展开,全部展开或折叠*/
e.Node.Toggle();/*默认提供的只能逐级展开或折叠*/
if (e.Node.IsExpanded && e.Node.Level == 0) e.Node.Collapse(); else e.Node.ExpandAll();
/*实现只有点击第一节点才全部展开,点击子节点则不展开也不折叠.*/
if (e.Node.IsExpanded && e.Node.Level == 0 && e.Node.Checked == false)
e.Node.Collapse(); else e.Node.ExpandAll();/*假如已勾选则无折叠*/
if (e.Node.Level == 0 && e.Node.Checked == false)
e.Node.Collapse(); else e.Node.ExpandAll();/*当勾选时展开,且点击子节点不动作*/
点击一次就勾选取反
e.Node.Checked = !e.Node.Checked;
设置勾选状态,子节点只有一个可以勾选,并勾选第一节点
/*设置勾选状态,子节点只有一个可以勾选,并勾选第一节点*/
TreeNode 节点 = e.Node, 下节 = 节点.FirstNode;
while (节点 != null || 下节 != null)
{
if (节点 != null) 节点 = 节点.Parent;
if (节点 != null)
{
节点.Checked = false;
if (节点.Level == 0)
节点.Checked = e.Node.Checked;
}
if (下节 != null)
{
下节.Checked = false;
下节 = 下节.FirstNode;
}
}
遍历树的所有节点及子节
/*遍历树的所有节点前5节及子节,获取每节所勾选,组成每节‘与’逻辑,所对应的配药3节或逻辑,
*或各5节的每节‘与’逻辑和各5节的‘或’逻辑,假如5节当中未选药性则以平性代;
*功能上分为自动配药与选定配药。*/
string 关键 = "肝,心,脾,肺,肾,中药名,性味归经,功效与作用,临床应用,药理研究,配伍药方"
, 询 = "";
foreach (TreeNode 树节 in 分类树.Nodes)
{
if (树节.Index >= 5) break;
if (树节.Checked) 询 += 树节.Text[0] + "-";
TreeNode 下节 = 树节.FirstNode;
while (下节 != null)
{
if (下节.Checked) 询 += 下节.Text + "-";
下节 = 下节.FirstNode;
}
询 += ";";
}
获取选中树节的第一节字符
Func<string> 查选中树节 = (/*获取选中树节的第一节字符,含子节选中*/) =>
{
string 字符 = "";
foreach (TreeNode 树节 in 分类树.Nodes)
{
if (树节.Index >= 5) break;
TreeNode 下节 = 树节;
while (下节 != null)
{
if (下节.IsSelected) 字符 = 树节.Text[0].ToString();
下节 = 下节.FirstNode;
}
}
return 字符;
};
获取选中树节的第一节字符,含子节选中;同时获取勾选的节点内容
foreach (TreeNode 树节 in 分类树.Nodes)
{/*获取选中树节的第一节字符,含子节选中;同时获取勾选的节点内容,合成查询语句。*/
if (树节.Index >= 5) break;
TreeNode 下节 = 树节;
while (下节 != null)
{
if (下节.IsSelected) 自动 = 树节.Text[0] + 下节.Text;
if (下节.Checked && 下节.Level > 0)
自定 += "( " + 关键.Split(',')[6] + " Like '%" + 树节.Text[0] + "%' And "
+ 关键.Split(',')[(多字符包含(下节.Text, 字符串转数组("平温凉热寒")) ? 6 : 7)]
+ " Like '%" + 下节.Text + "%' ) Or ";
下节 = 下节.FirstNode;
}
}