Componente WindowForm TreeView

Control TreeView Control de árbol
Introducción: visualización jerárquica de la colección de elementos de etiqueta

1. Atributos

2. Método
Agregar conjunto de volumen de datos de nodo parpadeando
BeginUpdate () Prohibir redibujar
// Agregar nodo
EndUpdate () Habilitar redibujar
CollapseAll () Contraer todos los nodos, ExpandAll () Expandir todos los nodos
GetNodeAt (objeto de nodo) Obtener nodo GetNodeAt (x, y )) Las coordenadas del nodo obtienen el nodo

3. Evento
AfterCheck — BeforeCheck Check
AfterSelect — BeforeSelect Check
AfterCollapse — BeforeCollapse Expand
AfterExpand — BeforeExpand Collapse
NodeMouseClick Haga clic en el nodo con el mouse

Agregar nodos manualmente
1. Introducción de nodos
Propiedades de TreeNode : Nombre: identifica de forma exclusiva el texto que muestra la colección de nodos secundarios de los nodos de texto del nodo

Aplicación: Asignación de permisos
Inserte la descripción de la imagen aquí

private void FrmTreeView_Load(object sender, EventArgs e)
{
    
    
    treeView1.Nodes.Clear();		//清除所有节点
    //如果一个节点下面有子节点,我是应该先把这个节点添加到treeview中,还是先应该添加好子节点,再添加到treeview?  都可以
    //添加节点过程:创建一个节点,将这个节点添加到treeview的Nodes集合;创建一个节点,将这个节点添加到当前节点的Nodes集合。。。。。。
    //更多的应用不是这样,而采用递归的方式,加载节点及子节点,数据的来源:制作成张表,ParentId---父节点编号

    //创建根节点 
    TreeNode root = new TreeNode();
    root.Name = "root";  			//节点名称
    root.Text = "学生管理系统";		//节点文本
    treeView1.Nodes.Add(root);		//将一个节点添加 到TreeView上
	//子节点(二级节点)
    TreeNode subNode = new TreeNode();
    subNode.Name = "stuManage";
    subNode.Text = "学生管理";
    root.Nodes.Add(subNode);		//添加一个子节点
	//三级节点
    TreeNode thirdNode = new TreeNode();
    thirdNode.Name = "addStudent";
    thirdNode.Text = "新增学生";
    subNode.Nodes.Add(thirdNode);
    thirdNode = new TreeNode();
    thirdNode.Name = "stuList";
    thirdNode.Text = "学生列表";
    subNode.Nodes.Add(thirdNode);
	//二级节点
    subNode = new TreeNode();
    subNode.Name = "classManage";
    subNode.Text = "班级管理";
    root.Nodes.Add(subNode);	//添加一个子节点
	//二级节点
    subNode = new TreeNode();
    subNode.Name = "gradeManage";
    subNode.Text = "年级管理";
    root.Nodes.Add(subNode);	//添加一个子节点
}

Agregue dinámicamente
datos de tabla de nodos (recursivos) : almacene los datos de relación entre nodos y subnodos, la relación jerárquica no se puede ver
. El proceso de cargar datos dinámicamente al control TreeView
① se obtienen los datos de la tabla
② crear un método: crear un nodo y agréguelo al Principio de recursividad de TreeView :Llámese a sí mismo
(puede haber más de un nodo hijo)
③ El método de llamada para crear el nodo se refleja en TreeView-
nodo de carga de datos dinámicos con relación jerárquica : el nodo se crea y se agrega a TreeView, y luego se crean sus nodos secundarios y luego se agregan a su colección de nodos
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

private void FrmTreeView_Load(object sender, EventArgs e)
{
    
    
    treeView1.Nodes.Clear();//清除所有节点
    //1. 获取数据
    DataTable dtMenus = DBHelper.GetDataTable("select Id,MName,ParentId from MenuInfos", 1);
    //3.调用方法,添加节点
    CreateNode(dtMenus, null, 0);
}

//2.添加节点(递归)
private void CreateNode(DataTable dt,TreeNode pNode,int parentId)
{
    
    
    //1.获取要创建的节点数据
   DataRow[] rows = dt.Select("ParentId=" + parentId);
    if(rows.Length>0)
    {
    
    
        foreach (DataRow  r in rows)
        {
    
    
            //2.节点信息
            TreeNode node = new TreeNode();
            node.Name = r["Id"].ToString();
            node.Text = r["MName"].ToString();
            //3.直接添加到TreeView Nodes  还是添加指定节点的Nodes里? 
            if (pNode != null)
                pNode.Nodes.Add(node);		//子节点
            else
                treeView1.Nodes.Add(node);	//根节点
            //4.判断当前节点下有没有子节点
            CreateNode(dt, node, int.Parse(node.Name));
        }
    }
}

Marque el procesamiento de los nodos TreeView
1. Verifique o cancele el nodo principal, y todos sus nodos secundarios son consistentes con él.
2. Siempre que un nodo secundario esté marcado, el nodo principal está marcado; si todos los nodos secundarios están desmarcados, el nodo padre no es Check
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
    
    
   if( e.Action ==TreeViewAction.ByMouse||e.Action==TreeViewAction.ByKeyboard)
    {
    
    
        SetChildNodesState(e.Node);
        SetParentNodeState(e.Node);
    }
}
//递归处理子节点的勾选
private void SetChildNodesState(TreeNode node)
{
    
    
    if (node.Nodes.Count > 0)
    {
    
    
        foreach (TreeNode n in node.Nodes)
        {
    
    
            n.Checked = node.Checked;
            SetChildNodesState(n);
        }
    }
}
//处理父节点
private void SetParentNodeState(TreeNode node)
{
    
    
    TreeNode pNode = node.Parent;		//获取父节点
    if(pNode!=null)
    {
    
    
        bool bl = false;
        foreach (TreeNode n in pNode.Nodes)
        {
    
    
            if (n.Checked)
            {
    
    
                bl = true;
                break;
            }
        }
        pNode.Checked = bl;
        SetParentNodeState(pNode);
    } 
}

Supongo que te gusta

Origin blog.csdn.net/asdasd1fdsyrt/article/details/114196776
Recomendado
Clasificación