Quick Tip – Reindexar itens de um sub-tópico em um TreeView
454 visualizações
Recentemente tive a necessidade de criar um treeview em asp.net onde a mesma é gerada a partir dos dados do banco. Bem até ai sem muito desafio, mas em um determinado momento do programa eu necessitaria alterar a ordem de um dos itens de algum subtópico, por exemplo na minha arvore existe um tópico subtópicos onde todos os itens possui um campo que é registrado a sequência de acordo com o IDPAI do item conforme tabela abaixo:
| IDITEM | DESC | IDPAI | SEQUENCIA |
| 1 | A | 0 | 1 |
| 2 | B | 0 | 2 |
| 3 | C | 0 | 3 |
| 4 | D | 0 | 4 |
| 5 | E | 1 | 1 |
Note que os itens de 1 a 4 pertencem ao IDPAI 0, ou seja, ficam todos na raiz da TreeView e o item 5 é sub-tópico do item 1.
Por enquanto tudo tranquilo, mas como alterar a posição do meu item D que está na sequência 4 da tabela enviando-o para a posição 1 onde está o item A e reindexar as sequencia dos demais itens da minha tabela?
| IDITEM | DESC | IDPAI | SEQUENCIA |
| 2 | B | 0 | 1 |
| 3 | C | 0 | 2 |
| 4 | D | 0 | 3 |
| 1 | A | 0 | 4 |
| 5 | E | 1 | 1 |
Bem, diante deste problema realizei algumas pesquisas e não encontrei nenhum material que me ajudasse até mesmo relatos de alguem que já havia usado esse tipo de lógica. Foi onde recorri à um amigo que também é colaborador aqui do Projetos e T.I. que é um samurai na arte de codificar, que por sinal resolveu esse tipo de lógica com o seguinte código, que é usado no update dos dados no SQL SERVER, que também pode ser transportado para qualquer linguagem.
| SQL | | Copiar código | | ? |
| 01 | UPDATE TABELA SET SEQUENCIA = CASE WHEN IDTOPICO <> @IDTOPICO_POSINICIAL |
| 02 | |
| 03 | --Caso o id do item a ser mudado de posição for diferente do id do tópico |
| 04 | |
| 05 | --da posição final e erifica se será incrementado ou decrementado os valores |
| 06 | |
| 07 | --da sequencias dos itens, por exemplo se o valor do topico for 1 e ele for |
| 08 | |
| 09 | --enviado a 4ª posição será decrementado 1 das demais sequencias ou caso o |
| 10 | |
| 11 | --item estiver na 4ª posição e for enviado a 1ª posição será incrementado 1 |
| 12 | |
| 13 | --a todos as demais sequências, dividindo o valor da subtração da posição |
| 14 | |
| 15 | --inicial com a posição final pelo valor absoluto |
| 16 | |
| 17 | THEN SEQUENCIA + (@POSICAO_INICIAL - @POSICAO_FINAL) / ABS (@POSICAO_INICIAL - @POSICAO_@FINAL) |
| 18 | |
| 19 | ELSE @POSICAO_FINAL |
| 20 | |
| 21 | END |
| 22 | |
| 23 | --Condição onde atualiza a sequência dos demais itens do treeview |
| 24 | |
| 25 | WHERE (@POSICAO_INICIAL < @POSICAO_FINAL AND SEQUENCIA BETWEEN @POSICAO_INICIAL AND @POSICAO_FINAL) OR (@POSICAO_INICIAL > @POSICAO_FINAL AND SEQUENCIA BETWEEN @POSICAO_FINAL AND @POSICAO_INICIAL) |
Essa é uma dica rápida para um determinado tipo de situação onde se necessita reindexar os itens de uma tabela qualquer. Espero que por mais singelo que seja esse artigo seja de grande ajuda.
-->











Muito bom Daniel! Cada dia que passa você me impressiona mais com seu empenho em buscar soluções para o que lhe é proposto!
Parabens!
Abraço e sucesso!