2016-05-05 3 views
2

Я пытаюсь выяснить, как привести мои выбранные строки в начало сетки. Очень важно, что я использую DevExpress Asp.Net MVC GridView.Devexpress 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; 
    } 
}; 

Короче говоря, мне нужно поставить выбранные строки сверху, но я не знаю, как получить выбранное состояние двух строк или столбцов, я сравниваю.

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

UPDATE: пока ваш код компилируется просто отлично. В этом столбце gridview фактически не сортируется. –

+0

Обновить сообщение с того, что вы пробовали, и я посмотрю на него, когда вернусь. Вы посмотрели ссылки. Afk прямо сейчас – Nkosi

Смежные вопросы