Изменить порядок сортировки элементов в gridview - LINQToSQL - PullRequest
0 голосов
/ 27 августа 2009

У меня есть сетка со списком категорий. В базе данных (MSSQL2008) таблица категорий имеет поле SortOrder (INT) NULL.

В настоящее время категории извлекаются с использованием:

Galleries.DataSource = From G In DB.GalleryCategories Order By G.SortOrder, G.Name

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

Мои первоначальные мысли: Определить идентификатор выбранного элемента. Определить идентификатор элемента до / после выбранного элемента. Обмен идентифицированных элементов в БД SortOrders.

Я бы тогда сделал сортировщик NOT NULL и удостоверился, что он инициализирован уникальным номером

Буду признателен за любые альтернативные предложения / комментарии по этому подходу

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Я обычно видел, как это делается так, и сделал это сам

  • SortOrder является целым
  • Каждый предмет увеличивается на 10 (т. Е. 10,20,30,40) или подходящее увеличение
  • Чтобы переместить предмет вверх, вычтите 15
  • Чтобы переместить элемент вниз, добавьте 15
  • Чтобы вставить предмет, возьмите цель и сложите / вычтите 1
  • Применение процедуры NormalizeSort (), которая сбрасывает значения на четные интервалы
    • 10,20, 25 , 30,40 => 10,20, 30 , 40,50

Это делает все это довольно простым, поскольку вставка чего-то поверх чего-то другого просто:

list.Add( New Item(..., target.SortOrder +1) )
list.NormalizeSort()

// or 
item.SortOrder += 11, etc

Если вы хотите сделать его десятичным, то вы можете просто сделать все последовательно и просто добавить .1 и т. Д. К порядку сортировки и снова нормализовать.

// Андрей

0 голосов
/ 28 августа 2009

я верю Galleries.AllowSorting = true; было бы достаточно далеко;)

...