Cargar Treview - Activar y Desactivar nodos padres e hijos

1,009 views
Skip to first unread message

YuL sOFT

unread,
May 3, 2015, 4:10:59 PM5/3/15
to csharp...@googlegroups.com

Hola buenas, aquí les traigo un código para llenar un treview en c#, y activar y desactivar sus nodos, de una tabla control de acceso de usuarios con la siguiente estructura:
Tabla usuarios:
id_usuario:
nombre

Tabla Menu
id_menu: Id unico
idpadre: id del Padre del Menu
descripción: Nombre del Formulario
posición: posición del menu

Tabla: Menu_Usuarios
id: Id Unico
id_usuario
id_menu
acceso: Activado o desactivado



using

System;


using

System.Collections.Generic;


using

System.ComponentModel;


using

System.Data;


using

System.Drawing;


using

System.Linq;


using

System.Text;


using

System.Threading.Tasks;


using

System.Windows.Forms;


using

CNegocio;



namespace

CPresentacion

{

   

public partial class frmUsuariosAcceso : Plantillas.frmPlantilla


    {

       

Usuarios_MimenuCN objUsuarios_MimenuCN = new Usuarios_MimenuCN();

       

private DataTable dtTv;

       

public frmUsuariosAcceso()

        {

            InitializeComponent();

        }

 

       

private void frmUsuariosAcceso_Load(object sender, EventArgs e)

        {

            dtTv =

new DataTable();

           

//objUsuarios_MimenuCN.GetUsuarios_mimenuXIdUsuario(_Key);


            dtTv = objUsuarios_MimenuCN.GetUsuarios_mimenuXIdUsuario(1);

            treeView1.CheckBoxes =

true;

           

foreach (DataRow row in dtTv.Rows)

            {

               

TreeNode NodoPadre = new TreeNode();

                NodoPadre.Name = row[

"id_menu"].ToString();

                NodoPadre.Text = row[

"descripcion"].ToString();

                NodoPadre.Tag = row[

"id_menu"].ToString();

               

if (string.IsNullOrEmpty(row["id_padre"].ToString()))

                {

                    treeView1.Nodes.Add(NodoPadre);

                    NodoPadre.Checked = (

bool)row["acceso"];

                }

                CargarNodosHijos(NodoPadre.Tag.ToString(), NodoPadre);

            }

            treeView1.ExpandAll();

//Expandir todos los nodos


            treeView1.SelectedNode = treeView1.Nodes[0];

//seleccionar el primer nodo           


        }

       

private void CargarNodosHijos(string indicePadre, TreeNode nodePadre)

        {

          

               

foreach (DataRow item in dtTv.Select("id_padre = " + indicePadre, "posicion asc"))

                {

                   

TreeNode nodoHijo = new TreeNode();

                    nodoHijo.Name = item[

"id_menu"].ToString();

                    nodoHijo.Text = item[

"descripcion"].ToString();

                    nodoHijo.Tag = item[

"id_menu"].ToString();

                   

if (dtTv.Select("id_padre =" + item["id_menu"]).Length == 0)

                    {

                       

//si no tiene hijos


                        nodePadre.Nodes.Add(nodoHijo);

                       

//nodePadre.Nodes.Add(nodoHijo.Tag.ToString(), item["descripcion"].ToString());


                        nodoHijo.Checked = (

bool)item["acceso"];

                       

                    }

                   

else


                    {

                       

//si tiene hijos


                        nodePadre.Nodes.Add(nodoHijo);

                        nodoHijo.Checked = (

bool)item["acceso"];

                        CargarNodosHijos(nodoHijo.Tag.ToString(), nodoHijo);

                    }

            }

        }

      

       

private void btnSalir_Click(object sender, EventArgs e)

        {

           

this.Close();

        }

       

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)

        {

            treeView1.AfterCheck -= treeView1_AfterCheck;

            check_nodos_padre(e.Node);

            check_nodos_hijos(e.Node);

            treeView1.AfterCheck += treeView1_AfterCheck;

        }

       

private void check_nodos_padre(TreeNode pNode)

        {

           

TreeNode NodoPadre = pNode.Parent;

           

if (NodoPadre != null) //si el nodo padre no es nulo


            {

               

if (pNode.Checked == true) // si el nodo esta activado


                {

                   

if (pNode.Parent != null) // si tiene padre


                    {

                       

if (pNode.Checked != NodoPadre.Checked) //si el padre esta activado


                        {

                            NodoPadre.Checked = pNode.Checked;

                           

//check_nodos_padre(NodoPadre);


                        }

                    }

                }

               

else


                {

                   

var cont = 0; //para acumular cuantos nodos hijos estan activos o desactivados


                   

foreach (TreeNode node in NodoPadre.Nodes) //Recorrer todos los nodos del mismo nivel


                    {

cont = cont + ((node.Checked == pNode.Checked) ? 1 : 0);

                    }

                   

if (cont == NodoPadre.Nodes.Count) //si el numero total de nodos hijos estan activos o desactivados


                        NodoPadre.Checked = pNode.Checked;

//establece el mismo estado al padre


                }

                treeView1.SelectedNode = NodoPadre;

               

if (NodoPadre.Parent != null) // si el nodo padre no es nulo


                {

                    check_nodos_padre(NodoPadre.Parent);

// realizamos la recursividad


                }

               

if (NodoPadre != null)

                {

                    NodoPadre = NodoPadre.Parent;

                }

            }

            treeView1.SelectedNode = pNode;

         

        }

       

private void check_nodos_hijos(TreeNode pNode)

        {          

           

if (pNode.Nodes.Count > 0)

            {

               

for (int i = 0; i < pNode.Nodes.Count; i++)

                {                    

                    treeView1.SelectedNode = pNode;

                    pNode.Nodes[i].Checked = pNode.Checked;

                   

if (pNode.Nodes[i].Nodes.Count > 0) //el nodo tiene subnodos


                    {

                        check_nodos_hijos(pNode.Nodes[i]);

                    }

                }

            }

            treeView1.SelectedNode = pNode;

        }

       

private void btnActualizar_Click(object sender, EventArgs e)

        {

           

int resul;

           

try


            {

               

foreach (TreeNode Node in treeView1.Nodes)

                {

                    resul = 0;

                    resul = objUsuarios_MimenuCN.UpdateUsuarios_Mimenu(

Convert.ToInt32(1), Convert.ToInt32(Node.Tag), (bool)Node.Checked);

                   

if (resul == 0)

                    {

                       

break;

                    }

                    RecorrerNodos(Node);

                }

            }

           

catch (Exception ex)

            {

               

               

throw;

            }

           

MessageBox.Show("Los datos han sido grabados correctamente.", VariablesGlobales.Titulo, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

           

this.Close();

        }

       

private void RecorrerNodos(TreeNode treeNode)

        {

           

int resul;

           

try


            {

               

foreach (TreeNode tn in treeNode.Nodes)

                {

                    resul = 0;

                    resul = objUsuarios_MimenuCN.UpdateUsuarios_Mimenu(

Convert.ToInt32(1), Convert.ToInt32(tn.Tag), (bool)tn.Checked);

                   

if (resul == 0)

                    {

                       

break;

                    }

                    RecorrerNodos(tn);

                }

            }

           

catch (Exception ex)

            {

               

               

throw;

            }

          

        }

       

private void checkBox1_CheckedChanged(object sender, EventArgs e)

        {

           

try


            {

               

foreach (TreeNode Node in treeView1.Nodes)

                {

                   

//if (checkBox1.Checked == true)


                   

//    checkBox1.Checked = true;


                   

//else


                   

//    checkBox1.Checked = false;


                    Node.Checked = (checkBox1.Checked ==

true) ? true : false;

                    RecorrerNodos(Node);

                }

            }

           

catch (Exception ex)

            {

               

               

throw;

            }

            treeView1.SelectedNode = treeView1.Nodes[0];

        }

       

private void ActivarDesactivarNodos(TreeNode treeNode)

        {

           

try


            {

               

foreach (TreeNode tn in treeNode.Nodes)

                {

                    tn.Checked = (checkBox1.Checked ==

true) ? true : false;

                    RecorrerNodos(tn);

                }

            }

           

catch (Exception ex)

            {

               

throw;

            }

        }

    }

}


Carlos Alfaro

unread,
May 3, 2015, 5:06:11 PM5/3/15
to csharp...@googlegroups.com

Muchas gracias estimado amigo:

 

Estoy esperando que un cliente acepte rehacer un programa que le hice en VFP, que lo haga ahora en C#, parte del mismo es precisamente los permisos de usuario.

 

Justo acabas de compartir una función que necesitaré.

 

Bendiciones.

 

Carlos Alfaro

--
Has recibido este mensaje porque estás suscrito al grupo "C#.NET Latinoamérica" de Grupos de Google.
Visita este grupo en http://groups.google.com/group/csharplatino.

Reply all
Reply to author
Forward
0 new messages