none
Consulta acerca de TreeView RRS feed

  • Pregunta

  •  

    Hola amigos, tengo el siguiente problema... tengo una tabla llamada acceso_prod, en la cual tengo 2 campos: acc_codusu (guardo nombre de usuario) y acc_menu(nombre del menu)

     

    en el formulario principal tengo las opciones del menu con nombres definidos, por ejemplo la opción maestros tiene por name: Op1000 y sus opciones interiores Op1010,Op1020 y así sucesivamente, los mismo para la segunda Opcion que tiene name: Op2000 y sus opciones hijas Op2010, Op2020, etc... ya que el campo "acc_menu" contiene precisamente estos textos, o sea los nombres de cada menuItem...

     

    Tengo un formulario con un TreeView para crear los permisos de acceso a mi sistema, en el cual cada nodo de tipo CHECK lo tengo con el mismo name de la opción correspondiente (op1000, Op2000, etc)...

     

    Lo que necesito saber es como puedo ir activamendo los check de cada name de los nodos del treeview que encuentra en la tabla, y por su puesto saber como puedo hacer para grabar los name de las opciones que marqué cuando lo necesite...

     

    Espero haberme explicado bien...

    Muchas gracias!!!...

    viernes, 28 de diciembre de 2007 5:27

Respuestas

  • Hola, a ver si puedo ayudar,

     

    No hay problema, aca estaría solucionado, simplemente create un nuevo proyecto winform en vb.net en vs2005 y en el form1 que te propone por defecto la solución en el codebehind, o sea, en el archivo .vb en el código del mismo, pega este código tal cual lo posteamos aca.

     

    Bloque de código

    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Me.TreeView1.CheckBoxes = True

    Dim nodeParent As TreeNode = Me.TreeView1.Nodes.Add("Key:Raiz", "Raiz")

    For i As Integer = 0 To 5

    nodeParent = nodeParent.Nodes.Add("Key:" + i.ToString(), i.ToString())

    Next

    Me.CheckAllNodes(Me.TreeView1.Nodes, True)

    Me.GetAllNodesCheck(Me.TreeView1.Nodes)

    End Sub

    Private Sub CheckAllNodes(ByVal col As TreeNodeCollection, ByVal check As Boolean)

    For Each tN As TreeNode In col

    tN.Checked = check

    Me.CheckAllNodes(tN.Nodes, check)

    Next

    End Sub

    Private Function GetAllNodesCheck(ByVal col As TreeNodeCollection) As List(Of TreeNode)

    Dim lTN As New List(Of TreeNode)

    For Each tN As TreeNode In col

    If (tN.Checked) Then lTN.Add(tN)

    lTN.AddRange(Me.GetAllNodesCheck(tN.Nodes))

    Next

    Return lTN

    End Function

    End Class

     

     

    Si te he podido ayudar, por favor no olvides de marcar la solución dada como respuesta correcta,

     

    Saludos,

    viernes, 28 de diciembre de 2007 19:51

Todas las respuestas

  • Se me olvidó mencionar que tambien necesito recorrer el control Menu de mi MdiForm para activando o desactivando sus opciones dependiendo de si se encuentra su name en la tabla Acceso_Prod que mencioné anteriormente.

     

    viernes, 28 de diciembre de 2007 5:52
  •  CyberMauro Escribió:

     

    Hola amigos, tengo el siguiente problema... tengo una tabla llamada acceso_prod, en la cual tengo 2 campos: acc_codusu (guardo nombre de usuario) y acc_menu(nombre del menu)

     

    en el formulario principal tengo las opciones del menu con nombres definidos, por ejemplo la opción maestros tiene por name: Op1000 y sus opciones interiores Op1010,Op1020 y así sucesivamente, los mismo para la segunda Opcion que tiene name: Op2000 y sus opciones hijas Op2010, Op2020, etc... ya que el campo "acc_menu" contiene precisamente estos textos, o sea los nombres de cada menuItem...

     

    Tengo un formulario con un TreeView para crear los permisos de acceso a mi sistema, en el cual cada nodo de tipo CHECK lo tengo con el mismo name de la opción correspondiente (op1000, Op2000, etc)...

     

    Lo que necesito saber es como puedo ir activamendo los check de cada name de los nodos del treeview que encuentra en la tabla, y por su puesto saber como puedo hacer para grabar los name de las opciones que marqué cuando lo necesite...

     

    Espero haberme explicado bien...

    Muchas gracias!!!...

     

    Hola, a ver si puedo ayudar,

     

    Aca debajo dejo un código que espero que espero te sirva para lograr el efecto esperado,

    Consta del FormLoad donde se chequean recursivamente todos los nodos y luego se consultan todos los nodos chequeados recursivamente y los terminan retornando en un List.

     

    Bloque de código

    private void Form1_Load(object sender, EventArgs e)

    {

    this.treeView1.CheckBoxes = true;

    TreeNode nodeParent = this.treeView1.Nodes.Add("Key:Raiz","Raiz");

    for (int i=0;i < 5;i++)

    {

    nodeParent = nodeParent.Nodes.Add("Key:"+i.ToString(),i.ToString());

    }

    this.CheckAllNodes(this.treeView1.Nodes, true);

    this.GetAllNodesCheck(this.treeView1.Nodes);

    }

    private void CheckAllNodes(TreeNodeCollection col, Boolean check)

    {

    foreach (TreeNode tN in col)

    {

    tN.Checked = check;

    this.CheckAllNodes(tN.Nodes, check);

    }

    }

    private List<TreeNode> GetAllNodesCheck(TreeNodeCollection col)

    {

    List<TreeNode> lTN = new List<TreeNode>();

    foreach (TreeNode tN in col)

    {

    if (tN.Checked)

    lTN.Add(tN);

    lTN.AddRange(this.GetAllNodesCheck(tN.Nodes));

    }

    return lTN;

}

 

 

Saludos,

 

 

 

viernes, 28 de diciembre de 2007 18:10
  • Gracias Fer, pero como estoy recién integrandome en .Net y no manejo mucho las instrucciones, no entiendo mucho de tu código, ya que yo estoy haciendo mi sistema en Visual Basic 2005, y no en C.

     

    viernes, 28 de diciembre de 2007 19:05
  • Hola, a ver si puedo ayudar,

     

    No hay problema, aca estaría solucionado, simplemente create un nuevo proyecto winform en vb.net en vs2005 y en el form1 que te propone por defecto la solución en el codebehind, o sea, en el archivo .vb en el código del mismo, pega este código tal cual lo posteamos aca.

     

    Bloque de código

    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Me.TreeView1.CheckBoxes = True

    Dim nodeParent As TreeNode = Me.TreeView1.Nodes.Add("Key:Raiz", "Raiz")

    For i As Integer = 0 To 5

    nodeParent = nodeParent.Nodes.Add("Key:" + i.ToString(), i.ToString())

    Next

    Me.CheckAllNodes(Me.TreeView1.Nodes, True)

    Me.GetAllNodesCheck(Me.TreeView1.Nodes)

    End Sub

    Private Sub CheckAllNodes(ByVal col As TreeNodeCollection, ByVal check As Boolean)

    For Each tN As TreeNode In col

    tN.Checked = check

    Me.CheckAllNodes(tN.Nodes, check)

    Next

    End Sub

    Private Function GetAllNodesCheck(ByVal col As TreeNodeCollection) As List(Of TreeNode)

    Dim lTN As New List(Of TreeNode)

    For Each tN As TreeNode In col

    If (tN.Checked) Then lTN.Add(tN)

    lTN.AddRange(Me.GetAllNodesCheck(tN.Nodes))

    Next

    Return lTN

    End Function

    End Class

     

     

    Si te he podido ayudar, por favor no olvides de marcar la solución dada como respuesta correcta,

     

    Saludos,

    viernes, 28 de diciembre de 2007 19:51
  • bueno en realidad no me sirvió el mensaje, gracias de todas formas...

     

    lunes, 31 de diciembre de 2007 21:18