Pergunta

A melhor maneira de permitir que o usuário para definir a ordem de um Table?

Estamos usando SQL Server 2005 e os controles DevExpress.

Nós temos uma tabela que contém o seguinte:

  1. Processo A
  2. Processo B
  3. Processo C
  4. Relatório A
  5. Relatório B
  6. Relatório C

Queremos permitir que o usuário altere a ordem a qualquer coisa que eles querem.

Aqui está um exemplo:

  1. Processo C
  2. Processo A
  3. Processo B
  4. Relatório B
  5. Relatório A
  6. Relatório C

Para acomodar isso nós adicionamos um campo DisplayOrder (INT) para a tabela que está maintainted pela nossa aplicação.

Está usando um campo INT a melhor solução para uma ordem definida pelo usuário?

Existem outros métodos para conseguir isso?

A razão, eu estou pedindo, está em nosso aplicativo atual leva cerca de 1 segundo para mover uma linha para baixo (ou para cima). Estou prestes a se abrir o código para ver por que está demorando tanto e se você Stack Overflow gurus têm boas idéias, eu poderia implementá-los naquele momento.

Se você está curioso, aqui está como eu acredito que a nossa aplicação permite a edição do DisplayOrder:

  1. Coloque a tabela em uma GridView
  2. Selecione uma linha
  3. Ao clicar em um botão Mover para baixo (há também um botão Mover para cima)
  4. The Click evento vai trocar DisplayOrder da linha atual com a linha debaixo dela.
  5. A mudança, para ambos os registros, são escritos de volta para o banco de dados
  6. Isso leva cerca de 1 segundo por clique (ou seja, 10 cliques igual 10 segundos)
Foi útil?

Solução

Poderia ser tomada 1 segundo por troca porque você está atualizando o DB com cada clique? Talvez até mesmo reselecting novamente os dados também?

Por que não selecionar os dados em objetos locais. Se ligam a esses objetos na grade. Quando você mover os objetos para cima e para baixo ajustar sua propriedade ordem de exibição. Só então fazer uma atualização para o DB

  1. Quando o usuário finalmente clica em Salvar.
  2. Se qualquer um dos valores do objeto mudaram.

Outras dicas

Gostaria de passar a decisão de poupança em um botão Salvar explícita para a re-ordenação porque o usuário pode mudar sua mente e, como Peter Morris sugere, que irá passar o seu problema de desempenho.

Outras coisas a considerar -. Mover explícita ao topo e Mover para itens de fundo

Eu implementei uma interface muito bem sucedido usando este tipo de abordagem para a seleção orientado para o utilizador de itens pesquisáveis ??e itens de relatório, em um sistema corporativo. Mais detalhes da interface do usuário são disponíveis para você ver (ser gentil, lembre-se trata-se de 15 anos de idade - de volta em dias mono planas). Um refinamento chave de um monte de testes com usuários - o ponto doce para salvar esta ordem não foi grupo per-per-usuário ou por empresa, mas. Os grupos foram as pessoas que trabalham em conjunto que tinham uma mesma página inicial (essencialmente a mesma raiz em um gráfico massivamente conectado). Tivemos cerca de 7 grupos exclusivos na organização.

Então, se você vai para uma abordagem por usuário ou por grupo, você precisa puxar os dados de classificação para fora em uma tabela separada que mapeia chaves de dados para inteiros ordinais.

Se você área a falar de uma ordem de exibição que o usuário quer definir e manter, que precisa ser em uma tabela separada com o ID do usuário e os ids dos registros que ele ou ela quer ver e uma coluna de ordem de exibição. Em seguida, a consulta que obtém os dados para essa página seria UseA juntar-se à mesa de preferência do usuário.

Se você quer apenas definir a ordem temporaily para o momento em que a pessoa está olhando para a tela, fazê-lo para obtener a interface do usuário.

Em qualquer caso não reordenar os registros na tabela de base, que é uma má escolha como você vai correr em condições de corrida onde o usuário a quer uma configuração e do usuário b inthe Entretanto está tentando mudar para uma definição differnt.

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