Tópico anterior Próximo tópico Novo tópico
C#
#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. Prática e quando tudo funciona e ninguém sabe porque. [Ô]Aquele que quer aprender gosta que lhe digam quando esta errado; só o tolo não 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. Prática e quando tudo funciona e ninguém sabe porque. [Ô]Aquele que quer aprender gosta que lhe digam quando esta errado; só o tolo não 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. Prática e quando tudo funciona e ninguém sabe porque. [Ô]Aquele que quer aprender gosta que lhe digam quando esta errado; só o tolo não gosta de ser corrigido -[Ô]Prov.12:1 |
|||
Tópico anterior Próximo tópico Novo tópico