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.

Sobre Daniel Oliveira

Daniel Oliveira já escreveu 29 artigos no portal.

Técnico em Informática desde 2006, Graduado em Gestão de Tecnologia da Informação, desenvolvedor na plataforma Microsoft Asp.Net / C# , PHP, HTML e CSS .

-->

1 Interação

  1. 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!

Interaja

Qual a soma entre:
4 + 2