Qual é a melhor maneira de armazenar dados em um TreeView Node?
-
23-08-2019 - |
Pergunta
O TreeView é uma boa maneira de apresentar uma hierarquia para os usuários, mas imagine o seguinte cenário com a hierarquia descrita abaixo:
Building 1
-Tenant 1
- Payment 1
- Payment 2
Building 2
-Tenant 1
- Payment 1
-Tenant 2
- Payment 1
- Payment 2
onde você precisa fazer uma inserção para um banco de dados quando o usuário clica no nó de pagamento. Essencialmente as variáveis ??necessárias para a inserção são BUILDING_ID, Tenant_Id, Payment_Id. Uma maneira de montar estes é caminhar para o pai de cada nó:
Building_Id = Payment.ParentNode.ParentNode.Id
É melhor para armazenar todos os valores do ID da no pagamento Node no seguinte formato, em seguida, analisar os valores para BUILDING_ID, Tenant_Id, Payment_Id? Por exemplo:
Payment.Value = "1|2|1"
Solução
Acho que a melhor maneira de lidar com dados adicionais é a subclasse TreeNode. I criar uma classe BaseNode que contém os dados compartilhados que quero manter e herdar mais longe que para quaisquer tipos de nó específico.
O valor da subclasse é que você pode manter tipos de dados fortes e tipos de dados complexos, tal como qualquer outra classe ... o que evita matrizes de hackers em uma string com separadores de tubos e similares.
Depois de ter seus nós no lugar que permite que a mesma árvore caminhada você propõe, só que agora você está puxando os valores de (digamos) BaseNode.MyData (que todos os seus subtipos herdará).
Uma coisa a observar para se você fizer isso, porém: você precisa entender como autoritário você quer esses nós para ser. No meu caso, quando o usuário navega a árvore que verificar com um cache de banco de dados para garantir que não precisamos para repovoar os dados.
Outras dicas
Se o TreeNodes
do controle TreeView
tem uma propriedade Tag
que mantém um objeto, você pode associar um objeto personalizado que contém as propriedades desejadas com tag de cada TreeNode
, então você pode acessá-los quando necessário.
Por exemplo, em .Net
como de 4,5, seria assim:
myTreeNode.Tag = myObject;
Onde myTreeNode
é uma instância de TreeNode
e myObject
é uma instância do objeto personalizado definido que contém os dados que você deseja ter associado a um TreeNode
do seu TreeView
.
Aqui está um artigo no MSDN na propriedade TreeNode.Tag: MSDN -. TreeNode.Tag propriedade
Você pode considerar tomar a idéia de Godeke mais e em vez de uma subclasse da TreeNode, amarrar os nós para uma coleção de objetos de negócios - armazenar seus dados locais nas propriedades dos filhos de cobrança. A lógica coleção será capaz de dar-lhe os dados que você precisa e você obter os benefícios de separar os dados ea lógica da camada de apresentação.