【问题标题】:Change item sortorder in gridview - LINQToSQL在gridview中更改项目排序顺序 - LINQToSQL
【发布时间】:2009-08-27 18:18:52
【问题描述】:

我有一个带有类别列表的网格视图。在数据库(MSSQL2008)中,类别表有一个SortOrder(INT) NULL字段。

目前使用以下方式检索类别:

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

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

我最初的想法是: 识别所选项目的 ID。 识别所选项目之前/之后的项目 ID。 交换 DB SortOrders 中已识别的项目。

然后我将排序顺序设为 NOT NULL 并确保将其初始化为唯一编号

对于这种方法的任何替代建议/cmets,我将不胜感激

非常感谢

【问题讨论】:

    标签: asp.net linq-to-sql gridview datasource


    【解决方案1】:

    我一般都看到是这样做的,自己也做过

    • 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 等添加到排序顺序并再次重新规范化。

    // 安德鲁

    【讨论】:

    • 我最终将排序字段初始化为等于主键,然后将其与记录的排序顺序交换之前/之后,但我喜欢事后规范化的想法 - 所以现在,一旦排序已全部完成,我将排序字段重新设置为顺序。非常感谢
    【解决方案2】:

    我相信 Gallery.AllowSorting = true; 就够了;)

    【讨论】:

    • 不幸的是,在这种情况下,我正在尝试对基础数据进行排序,以便所有用户都发生更改 - 而不仅仅是查看当前页面的用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多