постоянная сортировка коллекции

У меня есть наблюдаемая коллекция, которая предоставляется пользователю с помощью источника представления коллекции. Одно из свойств элементов коллекции — sortorder. Я пытаюсь разрешить пользователю постоянно использовать эту коллекцию и распространять изменения в db.

У меня работает CVS, где я могу использовать отдельные элементы, отображаемые в списке. Однако теперь мне нужно изменить item.sortorder==cvs.currentindex, и у меня возникли проблемы с определением правильного способа сделать это.

ИЗМЕНИТЬ

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

текущее значение порядка сортировки элементов равно 3.

пользователь перемещает отображаемый элемент списка в позицию 0 (т.е. первую позицию)

элементы новый порядок сортировки = 0 элемент с исходным порядком сортировки станет 1 и т. д.

это может быть достигнуто циклическим просмотром отсортированного CVS и созданием Item.SortOrder= CVS.Item.index.


person ecathell    schedule 12.08.2011    source источник


Ответы (2)


Базы данных возвращают строки из таблицы, как правило, в том порядке, в котором они были добавлены в таблицу, если вы не укажете предложение order by в своем запросе. изменение порядка в базе данных не является хорошей идеей. вместо этого попробуйте что-то вроде параметризованного запроса и передачи столбца и направления, которые вы хотите отсортировать, которые извлекаются из пользовательских настроек.

person Bueller    schedule 12.08.2011

Я понял.

Я вернулся и посмотрел на код, который использовал для изменения положения элементов, и на самом деле я использую саму коллекцию:

private void OnDecreaseSortOrderCommandExecute()
        {
            int index = QuestionsCVS.View.CurrentPosition;
            QuestionsViewModel item = SelectedQuestionVM;

            if (item != null && index > 0)
            {
                SortableQuestionsVMCollection.RemoveAt(index);
                SortableQuestionsVMCollection.Insert(index - 1, item);
                QuestionsCVS.View.Refresh();
                QuestionsCVS.View.MoveCurrentTo(item);
            }
        }

Поэтому я просто сделал это:

private void ResortSortableQuestionsVMCollection()
        {
            for (int i = 0; i < SortableQuestionsVMCollection.Count; i++)
            {
                SortableQuestionsVMCollection[i].SortOrder = i;
            }
        }

Я не знаю, будет ли это работать во всех обстоятельствах, но это определенно сделало то, что я хотел для этого.

person ecathell    schedule 12.08.2011