0

我有一个由 collectionviewsource 向用户公开的可观察集合。集合中项目的属性之一是 sortorder。我试图允许用户永久使用此集合并将更改传播到数据库。

我有 CVS 工作,我可以在列表框中显示单个项目时对其进行处理。但是现在我必须更改 item.sortorder==cvs.currentindex 并且我无法找出正确的方法来执行此操作。

编辑

显然我不够清楚。Sortorder 是我的数据库中的一个字段,它是我的对象的一部分,它允许用户控制列表控件中显示的项目的位置。我试图让我的用户能够通过将 sortorder 字段的值更改为等于显示项目的当前索引来更改这些项目在未来的排序方式。

项目当前排序顺序值为 3。

用户将显示的列表项移动到位置 0(即第一个位置)

items new sortorder=0 具有原始排序顺序的项目将变为 1 等

这可以通过循环排序的 CVS 并使 Item.SortOrder= CVS.Item.index

4

2 回答 2

0

数据库通常根据添加到表中的顺序从表中返回行,除非您在查询中指定 order by 子句。更改数据库中的顺序不是一个好主意。相反,尝试使用参数化查询并传入您希望排序的列和方向,这些是从用户首选项中检索的。

于 2011-08-12T12:59:22.300 回答
0

我想到了。

我回去查看了用于更改元素位置的代码,实际上我正在使用集合本身:

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;
            }
        }

我不知道这是否适用于所有情况,但它确实达到了我想要的效果。

于 2011-08-12T13:53:49.140 回答