2016-05-05 152 views
2

我试图找出如何使我的选择的行到网格的顶部。非常重要的是,我正在使用DevExpress Asp.Net MVC GridView。的DevExpress GridView的MVC自定义排序基于选择的行

我有以下,这是在字面上糖化几十个非解决方案结合在一起我最好的尝试。请注意评论:

settings.Columns.Add("customsort").Settings.SortMode = 
DevExpress.XtraGrid.ColumnSortMode.Custom; 

settings.CustomColumnSort += (sender, e) => { 

    if (e.Column.FieldName == "customsort") 
    { 
     //these following two lines are supposed to work according to the DX support team, but there is no "grid" object 
     bool isRow1Selected = grid.Selection.IsRowSelectedByKey(e.GetRow1Value(grid.KeyFieldName)); 
     bool isRow2Selected = grid.Selection.IsRowSelectedByKey(e.GetRow2Value(grid.KeyFieldName)); 
    } 

    e.Handled = isRow1Selected != isRow2Selected; 
    if (e.Handled) 
    { 
     //I don't even know whether this is right 
     e.Result = isRow1Selected ? 1 : -1; 
    } 
}; 

总之,我需要把在上面选中的行,但我不知道怎么弄了两行或我比较列的选中状态。

DevEx版本是15.1

UPDATE:代码示例:

settings.Columns.Add(column => 
     { 
      //column.FieldName = "customsort"; 
      column.FieldName = "customsort"; 
      column.Caption = "customsort"; 

      column.ColumnType = MVCxGridViewColumnType.Default; 
      //column.UnboundType = DevExpress.Data.UnboundColumnType.Integer; 
      column.Settings.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; 


     }); 



     settings.CustomColumnSort += (sender, e) => 
     { 
      var grid = (MVCxGridView)sender; 

      if (e.Column.FieldName == "customsort") 
      { 

       bool isRow1Selected = grid.Selection.IsRowSelectedByKey(e.GetRow1Value(grid.KeyFieldName)); 
       bool isRow2Selected = grid.Selection.IsRowSelectedByKey(e.GetRow2Value(grid.KeyFieldName)); 

       e.Result = isRow2Selected.CompareTo(isRow1Selected); 
       e.Handled = true; 
      } 
     }; 

如果我点击 “customsort” 一栏,但它确实执行回发,但排序顺序不会改变。所以至少我得到了一个地方,但我还没有到那里。

回答

1

我把这个问题的DevExpress的支持团队。他们的反馈是,就我而言,我使用数据库服务器模式时不支持自定义排序。所以,我的代码是正确的,因为如果一个人不使用服务器模式,就可以实现自定义排序。

希望这可以帮助别人,拯救他们调试一些小时。

1

你可以为您解决特定问题的几个选项。

您需要将sender对象转换为MVCxGridView才能访问您尝试使用的属性。

settings.CustomColumnSort += (sender, e) => { 
    var grid = (MVCxGridView)sender; 

    if (e.Column.FieldName == "customsort") {    
     bool isRow1Selected = grid.Selection.IsRowSelectedByKey(e.GetRow1Value(grid.KeyFieldName)); 
     bool isRow2Selected = grid.Selection.IsRowSelectedByKey(e.GetRow2Value(grid.KeyFieldName)); 

     e.Result = isRow2Selected.CompareTo(isRow1Selected); 
     e.Handled = true; 
    } 
}; 

你可以完全放弃了grid变量,只专注于自定义列。

settings.CustomColumnSort += (sender, e) => { 
    var columnName = "customsort";   
    if (e.Column.FieldName == columnName) {    
     var c1 = Convert.ToBoolean(e.GetRow1Value(columnName)); 
     var c2 = Convert.ToBoolean(e.GetRow2Value(columnName)); 
     e.Result = c2.CompareTo(c1); 
     e.Handled = true; 
    } 
}; 

现在假设您的自定义排序列是类似复选框的Boolean类型。

最后,随着Boolean列你可以沿着简单的路线和一系列检查列运行通过设置排序为降序出现在上面。 (True = 1,False = 0)

settings.Columns.Add("ColumnName").SortOrder = DevExpress.Data.ColumnSortOrder.Descending; 

以下资源可能证明是有用的。

看看本作Row Selection

看看本作Sorting

+0

好吧,我可以让我的自定义排序列任何真正。它只是放在所以我可以手动调用一个Customrow.Sort()方法,将按照选择排序。谢谢你。 200个互联网给你。 –

+0

更新:你的代码编译得很好。 gridview实际上并没有在这个列上排序。 –

+0

更新文章与你试过的东西,当我回来时我会看看它。你看过链接吗? Afk现在 – Nkosi

相关问题