none
Pasar Nodos de un Treeview a un DataGridView RRS feed

  • Pregunta

  • Tengo un TreeView con 4 niveles dentro de un form, el cual solo los nodos del último nivel (nivel 4), tienen que integrarse dentro de un comboBox en un DataGridView, los nodos tienen un codigo y un nombre, el datagridview esta en otro form, ¿como haría esa comunicación entre formularios y que el comboBox me agarre esos datos desde el treeview? Ya que si se agrega un nuevo nodo en ese ultimo nivel, me tendiria que aparecer en el combobox de mi datagriview. Utilizo Visual Studio 2017C# y SqlServer. Agrego que mi TreeView se carga desde la base de datos, trabajo en programacion en 3 capas, y el treeview esta en una carpeta dentro de mi capa presentacion y el datagridview esta en otro form dentro de otra carpeta, para tener un mejor orden.
    miércoles, 15 de enero de 2020 21:14

Respuestas

  • Hola   NathalyChR

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te  recomiendo probar el siguiente código

     

     
    private void tvCategoryproducts_AfterCheck_UsingLinq(object sender, TreeViewEventArgs e)
    {
        //
        // Se remueve el evento para evitar que se ejecute nuevamente por accion de cambio de estado
        // en esta operacion
        //
        tvCategoryproducts.AfterCheck -= tvCategoryproducts_AfterCheck_UsingLinq;
     
        //
        // Se valida si el nodo marcado tiene presedente
        // en caso de tenerlo se debe evaluar los nodos al mismo nivel para determinar si todos estan marcados,
        // si lo estan se marca tambien el nodo padre
        //
        if (e.Node.Parent != null)
        {
            e.Node.Parent.Checked = !e.Node.Parent.Nodes.Cast<TreeNode>().Any(x => !x.Checked);
        }
     
        //
        // Se valida si el nodo tiene hijos
        // si los tiene se recorren y asignan el estado del nodo que se esta evaluando
        //
        if (e.Node.Nodes.Count > 0)
        {
            e.Node.Nodes.Cast<TreeNode>().ToList().ForEach(x => x.Checked = e.Node.Checked);
        }
     
     
        tvCategoryproducts.AfterCheck += tvCategoryproducts_AfterCheck_UsingLinq;
     
    }
    
    
    
    ///////////////////////////////////////////////////////
    
    private void tvCategoryproducts_AfterCheck(object sender, TreeViewEventArgs e)
    {
        //
        // Se remueve el evento para evitar que se ejecute nuevamente por accion de cambio de estado
        // en esta operacion
        //
        tvCategoryproducts.AfterCheck -= tvCategoryproducts_AfterCheck;
     
        //
        // Se valida si el nodo marcado tiene presedente
        // en caso de tenerlo se debe evaluar los nodos al mismo nivel para determinar si todos estan marcados,
        // si lo estan se marca tambien el nodo padre
        //
        if (e.Node.Parent != null)
        {
            bool result = true;
            foreach (TreeNode node in e.Node.Parent.Nodes)
            {
                if (!node.Checked)
                {
                    result = false;
                    break;
                }
            }
     
            e.Node.Parent.Checked = result;
     
        }
     
        //
        // Se valida si el nodo tiene hijos
        // si los tiene se recorren y asignan el estado del nodo que se esta evaluando
        //
        if (e.Node.Nodes.Count > 0)
        {
            foreach (TreeNode node in e.Node.Nodes)
            {
                node.Checked = e.Node.Checked;
            }
        }
     
     
        tvCategoryproducts.AfterCheck += tvCategoryproducts_AfterCheck;
     
    }
    
    
    

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

    jueves, 16 de enero de 2020 16:37
    Moderador
  • Gracias, eso es si el Nodo esta checkeado?

    viernes, 17 de enero de 2020 17:35

Todas las respuestas

  • Hola   NathalyChR

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te  recomiendo probar el siguiente código

     

     
    private void tvCategoryproducts_AfterCheck_UsingLinq(object sender, TreeViewEventArgs e)
    {
        //
        // Se remueve el evento para evitar que se ejecute nuevamente por accion de cambio de estado
        // en esta operacion
        //
        tvCategoryproducts.AfterCheck -= tvCategoryproducts_AfterCheck_UsingLinq;
     
        //
        // Se valida si el nodo marcado tiene presedente
        // en caso de tenerlo se debe evaluar los nodos al mismo nivel para determinar si todos estan marcados,
        // si lo estan se marca tambien el nodo padre
        //
        if (e.Node.Parent != null)
        {
            e.Node.Parent.Checked = !e.Node.Parent.Nodes.Cast<TreeNode>().Any(x => !x.Checked);
        }
     
        //
        // Se valida si el nodo tiene hijos
        // si los tiene se recorren y asignan el estado del nodo que se esta evaluando
        //
        if (e.Node.Nodes.Count > 0)
        {
            e.Node.Nodes.Cast<TreeNode>().ToList().ForEach(x => x.Checked = e.Node.Checked);
        }
     
     
        tvCategoryproducts.AfterCheck += tvCategoryproducts_AfterCheck_UsingLinq;
     
    }
    
    
    
    ///////////////////////////////////////////////////////
    
    private void tvCategoryproducts_AfterCheck(object sender, TreeViewEventArgs e)
    {
        //
        // Se remueve el evento para evitar que se ejecute nuevamente por accion de cambio de estado
        // en esta operacion
        //
        tvCategoryproducts.AfterCheck -= tvCategoryproducts_AfterCheck;
     
        //
        // Se valida si el nodo marcado tiene presedente
        // en caso de tenerlo se debe evaluar los nodos al mismo nivel para determinar si todos estan marcados,
        // si lo estan se marca tambien el nodo padre
        //
        if (e.Node.Parent != null)
        {
            bool result = true;
            foreach (TreeNode node in e.Node.Parent.Nodes)
            {
                if (!node.Checked)
                {
                    result = false;
                    break;
                }
            }
     
            e.Node.Parent.Checked = result;
     
        }
     
        //
        // Se valida si el nodo tiene hijos
        // si los tiene se recorren y asignan el estado del nodo que se esta evaluando
        //
        if (e.Node.Nodes.Count > 0)
        {
            foreach (TreeNode node in e.Node.Nodes)
            {
                node.Checked = e.Node.Checked;
            }
        }
     
     
        tvCategoryproducts.AfterCheck += tvCategoryproducts_AfterCheck;
     
    }
    
    
    

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

    jueves, 16 de enero de 2020 16:37
    Moderador
  • Gracias, eso es si el Nodo esta checkeado?

    viernes, 17 de enero de 2020 17:35