2009-08-27 47 views
0

我有与类别列表的GridView控件。在数据库(MSSQL2008)中,类别表具有SortOrder(INT)NULL字段。更改项目排序顺序在GridView控件 - LINQToSQL

目前类别使用检索:

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

现在,我需要能够做的就是添加“上移”和“下移”按钮,每行允许用户对项目进行排序以任意的方式。

我的初始想法是沿着线: 标识所选项目的ID。 识别选定项目之前/之后项目的ID。 交换在DB SortOrders标识项目。

我将不得不做出排序顺序NOT NULL,并确保它初始化为一个唯一的编号

我会很感激这种方法的任何其他建议/意见

非常感谢

回答

2

我有一般看到它这样做的方式,我已经这么做了自己

  • SortOrder的是一个int
  • 度10(因此,10,20,30,40)或合适的增量
  • 每个项目的增加要移动一个项目时,减去15
  • 要向下移动一个项目,添加15
  • 要插入的项,取目标和加/减1
  • 应用(Apply)重置值以等间隔
    • 10,20一个NormalizeSort()例程,,30,40 => 10,20,, 40,50

这使得一切都非常简单,因为将上述别的东西就是:

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

// or 
item.SortOrder += 11, etc 

如果你想成为一个小数,那么你可以让这一切顺序,只是添加.1等排序顺序并重新归一化。

//安德鲁

+0

我结束了初始化排序字段等于主键,只是交换与记录的排序顺序之前/之后,但我喜欢事后规范化的想法 - 所以现在,一旦排序完成,我重新设置排序字段为顺序。 千恩万谢 – Basic 2009-09-05 01:50:32

0

我相信 Galleries.AllowSorting = TRUE; 将是远远不够;)

+0

不幸的是,在这种情况下,我想,这样的变化发生时所有用户的基本数据进行排序 - 不只是一个浏览当前页面。 – Basic 2009-09-05 01:51:07