2016-05-05 11 views
2

選択した行をグリッドの最上部に移動する方法を理解しようとしています。非常に重要なのは、私がDevExpress Asp.Net MVC GridViewを使用していることです。選択した行に基づくMVC Gridviewカスタムソートの選択

私は以下を持っています。これは、文字通り数多くの非ソリューションを一緒にマッシュアップするための私の最高の試みです。コメントを注意してください:要するに

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

、私は上に選択された行を配置する必要がありますが、私は比較てる2行または列の選択状態を取得する方法がわかりません。コードサンプル:

デベックスバージョンは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 internets。 –

+0

更新:あなたのコードがうまくコンパイルされている間。グリッドビューは実際にはこの列をソートしません。 –

+0

あなたが試したことのある記事を更新して、私が戻ったときにそれを見てみましょう。あなたはリンクを見ましたか?今はAfk – Nkosi

関連する問題