2016-05-05 59 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

相關問題