MARCAR Nó NA TREEVIEW

 Tópico anterior Próximo tópico Novo tópico

MARCAR Nó NA TREEVIEW

C#

 Compartilhe  Compartilhe  Compartilhe
#500072 - 15/06/2022 17:25:54

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Pessoal boa tarde, tenho uma treeview onde tem os acessos de um usuário, já esta preenchida com todos os seus devidos campos, o que estou tentando fazer é pegar o acesso do usuário e marcar o check do nó , más não estou conseguindo fazer isso

                //Carregar o acesso do usuário
                ListaAcessoUsuario = new HashSet<string>(Usuario.ListarAcesso(CodUsuarioSelecionado));

                //Marcar o acesso no treeview
                foreach (var item in ListaAcessoUsuario)
                {
                    TreeAcesso.Nodes.Find(item.Trim(), true);
                    TreeAcesso.SelectedNode.Checked = true;
                }
                AcessoCarregado = true;

Minha idéia era essa que postei, utilizando o find e ai entro com o nome da tag , procurando em todos os filhos e ja marcava como checked

Alguém poderia me dar uma luz, só falta essa parte para poder finalizar esse controle de acesso e não estou achando muita coisa referente a isso

Desde já agradeço a todos

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


Resposta escolhida #500077 - 17/06/2022 02:25:20

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Vendo seu código, me fez pensar que talvez na hora de criar o TreeNode você não esteja passando a key, somente a propriedade text. Como a pesquisa do método Find é feita usando o parâmetro key, poderia ser isso.
De qualquer forma fiz um exemplo simples aqui. Para deixar funcional, simulei um banco em memória. O que é importante pra você é o que está depois do construtor do formulário.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace TreeViewExample
{


    public partial class Form1 : Form
    {

        class Permission
        {
            public string Id { get; set; }
            public string Description { get; set; }

            internal Permission(string id, string description)
            {
                this.Id = id;
                this.Description = description;
            }
        }

        class User
        {
            public string Name { get; set; }
            public IList<Permission> Permissions { get; set; }

            public User(string name)
            {
                this.Name = name;
            }

        }

        class DummyDatabase
        {
            public IList<User> Users { get; private set; }
            public IList<Permission> Permissions { get; private set; }

            internal DummyDatabase()
            {
                this.Permissions = CreatePermissions();
                this.Users = CreateUsers();

            }

            private IList<Permission> CreatePermissions()
            {
                return new List<Permission>()
            {
                new Permission('Customer.CanEdit', 'Allow to edit a customer'),
                new Permission('Customer.CanDelete', 'Allow to delete a customer'),
                new Permission('Customer.CanInsert', 'Allow to insert a customer'),
                new Permission('Customer.CanView', 'Allow to view a customer')
            };
            }

            private IList<User> CreateUsers()
            {
                return new List<User>()
            {
                new User('Gohan')
                {
                    Permissions = new List<Permission>()
                    {
                        this.Permissions.First(permission => permission.Id == 'Customer.CanEdit'),
                        this.Permissions.First(permission => permission.Id == 'Customer.CanView')
                    }
                }
            };
            }

        }


        private readonly DummyDatabase _database = new DummyDatabase();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.LoadAllPermissions();
            this.CheckUserPermissions(userName: 'Gohan');
        }

        private void LoadAllPermissions()
        {
            foreach(Permission permission in _database.Permissions)
                treeView1.Nodes.Add(key: permission.Id, text: permission.Description);
        }

        private void CheckUserPermissions(string userName)
        {
            User user = this._database.Users.First(u => u.Name == userName);

            foreach(Permission userPermission in user.Permissions)
            {
                TreeNode node = treeView1.Nodes.Find(userPermission.Id, searchAllChildren: true).First();
                node.Checked = true;
            }
        }

    }
}


Programo por amor... amor ao dinheiro para pagar as contas...


#500080 - 17/06/2022 09:15:47

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


DS2T agradeço o retorno e a ajuda

Quanto ao seu comentário, eu tinha colocado sim o nome da minha chave no nó , segue meu comando para preencher, caso tiver alguma sugestão para eu melhorar esse preenchimento, aceito, pois como estou começando a desenvolver em C#, posso estar fazendo alguma coisa errada

        private void PreencherTreeView(TreeNode n, string Chave_Filho)
        {
            string Sql = 'Select chave,chave_p,texto from acessoxitens where chave_p = '' + Chave_Filho + '' order by ncadastro';
            DataTable Dt = BancoDados.MostraDados(Sql);

            if (Dt.Rows.Count > 0)
            {
                foreach (DataRow registro in Dt.Rows)
                {
                    TreeNode t = new TreeNode(registro['texto'].ToString());
                    t.Name = registro['chave'].ToString();
                    PreencherTreeView(t, registro['chave'].ToString());
                    if (n == null)
                        TreeAcesso.Nodes.Add(t);
                    else
                        n.Nodes.Add(t);
                }
            }
        }

Com o seu código entendi o que fiz de errado na pesquisa e o porque estava errado, no meu código, eu achei que ao encontrar o nó, automaticamente ele ficava selecionado , porém não estava acontecendo isso.


Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


#500081 - 17/06/2022 16:44:26

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


O código em si está bacana.
Umas dicas para um próximo desenvolvimento:

1 - Tenta isolar a camada de dados. Deixe o acesso ao banco de dados, assim como as consultas, numa camada separada da de apresentação. Isso vai facilitar na manutenção.

2 - Evite ficar concatenando consultas SQL, isso pode dar margem a SQL Injection. Sempre prefira usar parâmetros.

3 - Prefira trabalhar com classes tipadas do que com DataTable/DataSet. Vai facilitar a manutenção e também evitar essas conversões explícitas no meio do código - como fez ao usar ToString().

4 - Tente manter um padrão de nomenclatura constante. Tem hora que sua variável começa com letra minúscula (TreeNode t = ...). Tem hora que você declara como maiúscula (DataTable Dt ...). O mesmo para os parâmetros do método também. Percebi que hora você usa camelCase e hora snake_case. Manter o padrão deixa o código mais fácil  de ler.

5 - Cuidado com métodos recursivos ou loops que acessam o banco de dados. Geralmente não vale a pena ficar nesse 'vai-e-volta' entre aplicação e banco de dados. A latência da rede muitas vezes vai deixar o tempo de transferência de dados muito maior do que a da consulta em si.


Abraços!


Programo por amor... amor ao dinheiro para pagar as contas...


#500082 - 17/06/2022 17:27:08

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Agradeço pelas dicas e com certeza irei colocar em prática

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ALVAROVB2009 em 17/06/2022 17:27:24