2016-05-05 13 views
2

Ich versuche herauszufinden, wie meine ausgewählten Zeilen an die Spitze des Rasters gebracht werden. Sehr wichtig ist, dass ich das DevExpress Asp.Net MVC GridView verwende.MVC Gridview benutzerdefinierte Sortierung basierend auf ausgewählten Zeilen zu entwickeln

Ich habe das Folgende, das ist mein bester Versuch, buchstäblich Dutzende von Nicht-Lösungen zu vermischen. Bitte beachten Sie die Kommentare:

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

Kurz gesagt, ich brauche auf ausgewählten Zeilen zu setzen, aber ich weiß nicht, wie die ausgewählten Zustand der beiden Reihen zu bekommen oder Spalten Ich vergleiche.

Devex Version 15.1

UPDATE: Codebeispiel:

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

Wenn ich auf der "CustomSort" Spalte klicken, wird es ein Postback durchführen, aber die Sortierreihenfolge ändert sich nicht. Zumindest komme ich irgendwohin, aber ich bin noch nicht ganz da.

Antwort

1

ich diese Frage Support-Team DevExpress setzen. Ihre Rückmeldung war, dass in meinem Fall, wo ich den Datenbankservermodus verwendete, keine benutzerdefinierte Sortierung unterstützt. Mein Code ist insofern korrekt, als man so eine benutzerdefinierte Sortierung implementieren würde, wenn man nicht den Server-Modus benutzt.

Hoffe das hilft jemandem und spart ihnen einige Stunden Debugging.

1

Sie haben einige Optionen zur Lösung Ihres speziellen Problems.

Sie müssen das Objekt sender an die MVCxGridView übertragen, um Zugriff auf die Eigenschaften zu erhalten, die Sie verwenden möchten.

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

Sie könnten die grid Variable ganz verzichten und konzentrieren sich nur auf die benutzerdefinierte Spalte.

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

Hier ist die Annahme, dass Ihre benutzerdefinierte Sortierspalte ein wie ein Kontrollkästchen Boolean Typ ist.

Schließlich können Sie mit der Spalte Boolean die einfachste Route hinuntergehen und die aktivierten Spalten so einstellen, dass sie oben angezeigt werden, indem Sie sort auf absteigend setzen. (True = 1, False = 0)

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

Die folgenden Ressourcen könnten sich als nützlich erweisen.

Werfen Sie einen Blick auf diese für Row Selection

auf dieses Werfen Sie einen Blick für Sorting

+0

Nun, ich kann meine benutzerdefinierte Sortierspalte alles wirklich machen. Es wurde einfach eingefügt, so dass ich manuell eine Customrow.Sort() -Methode aufrufen konnte, die stattdessen nach selected sortiert. Danke dafür. 200 Internets für Sie. –

+0

UPDATE: während der Code kompiliert einfach gut. Die Gridview sortiert diese Spalte nicht. –

+0

Aktualisiere den Beitrag mit dem, was du versucht hast, und ich werde es mir ansehen, wenn ich zurückkomme. Hast du dir die Links angesehen? Afk jetzt – Nkosi