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"
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top