Pergunta

Eu tenho uma tabela de banco de dados grande que eu preciso para exibir em um Windows Form. Os dados são uma espécie de "lista de categorias", que eu preciso de exibição para o usuário em um treeview-como estrutura, há categorias com mais sub-categorias. controlo TreeView tem carga de atraso, mas o problema é que pode haver centenas de milhares de nós de raiz com valores de cadeia de quatro colunas. Eu tentei adicionar 100000 nós a um treeview e levou 5 minutos para ser concluído. Existem outras opções para tal operação? Você pode me dar alguma idéia? Não faz Have para ser um treeview ..

Foi útil?

Solução 5

I decidiu implementar um modo de servidor / virtual para o treeview.

Obrigado pelas respostas.

Outras dicas

Isso é um monte de nós, mas se você tentar chamar BeginUpdate () e, em seguida, EndUpdate () quando adicionado a lista de nós a TreeView? Que, provavelmente, trazer o seu desempenho um pouco!

http://msdn.microsoft .com / en-us / library / system.windows.forms.treeview.beginupdate.aspx

Para aplicações como este, que tendem a implementar recursos como "busca enquanto você digita", que iria retornar nomes de categorias como eles são digitados em uma caixa de texto. Por exemplo, em cada keystroke, gostaria de voltar para o banco de dados e retornar o top 10 ou assim os valores que começam com o que está na caixa de texto. Se houver mais de 10 resultados, ou eu indicam que mais resultados estão presentes, ou eu digo a eles para refinar sua busca. IMO busca directa sempre supera triagem e / ou paginação. Eu odeio paginação. É quase sempre uma admissão de que a sua funcionalidade de pesquisa não é bom o suficiente!

Talvez implementar algum tipo de mecanismo de paginação. 100.000 itens em um TreeView seria muito difícil para ler a partir da perspectiva do usuário. Fornecendo apenas 1.000 ou até menos nós raiz de cada vez apoiaria certamente corte em tempos de carregamento.

Você pode usar os recursos de cache. 20000 registros geralmente leva 0,2s para carga. Verifique se o seu suporte ao idioma, a fim de usá-lo.

Atenciosamente,

TreeView tem uma BeforeExpand evento. Você pode usá-lo para determinar em tempo real qual o conteúdo do nó para carregar. Ou seja, você primeira carga apenas os nós de nível superior em sua TreeView.

Se o usuário está prestes a expandir um nó você pode buscar os dados necessários e preencher os subnós desse nó. Use a propriedade Tag de TreeNode para armazenar um ID que dados pertencem a qual nó.

Certifique-se de usar BeginUpdate () e EndUpdate () ou o uso AddRange () em vez de add () para adicionar nós, porque é muito mais rápido.

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