Лучший способ позволить пользователю определить порядок таблицы? - PullRequest
1 голос
/ 08 февраля 2009

Лучший способ разрешить пользователю определять порядок таблицы?

Мы используем элементы управления SQL Server 2005 и DevExpress.

У нас есть таблица, содержащая следующее:

  1. Процесс A
  2. Процесс B
  3. Процесс C
  4. Отчет A
  5. Отчет B
  6. Отчет C

Мы хотим, чтобы пользователь мог изменить порядок на что угодно.

Вот один пример:

  1. Процесс C
  2. Процесс A
  3. Процесс B
  4. Отчет B
  5. Отчет A
  6. Отчет C

Для этого мы добавили поле DisplayOrder (INT) в таблицу, которая поддерживается нашим приложением.

Является ли использование поля INT лучшим решением для пользовательского заказа?

Есть ли другие способы сделать это?

Причина, которую я спрашиваю, заключается в том, что в нашем текущем приложении требуется около 1 секунды для перемещения строки вниз (или вверх). Я собираюсь взломать код, чтобы понять, почему он занимает столько времени, и если у вас, гуру Stack Overflow, есть какие-нибудь хорошие идеи, я мог бы реализовать их в то время.

Если вам интересно, вот как я полагаю, наше приложение позволяет редактировать DisplayOrder:

  1. Загрузить таблицу в GridView
  2. Выберите строку
  3. Нажатие кнопки «Вниз» (есть также кнопка «Вверх»)
  4. Событие Click заменяет DisplayOrder текущей строки на строку под ней.
  5. Изменения обеих записей записываются обратно в базу данных
  6. Это занимает около 1 секунды за клик (т. Е. 10 кликов равны 10 секундам)

Ответы [ 3 ]

1 голос
/ 08 февраля 2009

Я бы перенес решение о сохранении в явную кнопку Сохранить для повторного заказа, потому что пользователь может передумать, и, как предполагает Питер Моррис, это решит проблему с производительностью.

Дальнейшие вещи для рассмотрения - явные элементы Move to Top и Move to Bottom.

Я реализовал очень успешный пользовательский интерфейс с использованием такого подхода для пользовательского выбора элементов поиска и элементов отчетности в корпоративной системе. Более подробную информацию о пользовательском интерфейсе можно посмотреть на (будьте добры, помните, что ему около 15 лет - в прежние моно дни!). Одно из ключевых уточнений в ходе многочисленных пользовательских тестирований - самое лучшее место для сохранения этого заказа было не для каждого пользователя или для каждой компании, а для каждой группы. Группы были людьми, работающими вместе, у которых была одна и та же стартовая страница (по сути, один и тот же корень в массивно связанном графике). У нас было около 7 уникальных групп в организации.

Итак, если вы выбираете подход для каждого пользователя или группы, вам нужно вынести данные сортировки в отдельную таблицу, которая отображает ключи данных в порядковые целые числа.

1 голос
/ 08 февраля 2009

Может ли это занять 1 секунду на обмен, потому что вы обновляете БД с каждым кликом? Может быть, даже повторный выбор данных снова?

Почему бы не выделить данные в локальные объекты. Привязать к этим объектам в сетке. При перемещении объектов вверх и вниз настройте их свойство порядка отображения. Тогда только сделайте обновление БД

  1. Когда пользователь наконец нажимает Сохранить.
  2. Если какое-либо из значений объекта изменилось.
0 голосов
/ 09 февраля 2009

Если вы говорите о порядке отображения, который пользователь хочет установить и сохранить, он должен быть в отдельной таблице с идентификатором пользователя и идентификаторами записей, которые он или она хочет просмотреть, и столбцом порядка отображения. Тогда запрос, который получает данные на эту страницу, будет использовать присоединение к таблице предпочтений пользователя.

Если вы хотите просто временно установить порядок на время, которое человек смотрит на экран, сделайте это через пользовательский интерфейс.

В любом случае не переупорядочивайте записи в базовой таблице, это плохой выбор, так как вы столкнетесь с условиями гонки, когда пользователь хочет один параметр, а пользователь тем временем пытается перейти на другой параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...