基于所选行的 Devexpress MVC Gridview 自定义排序
Posted
技术标签:
【中文标题】基于所选行的 Devexpress MVC Gridview 自定义排序【英文标题】:Devexpress MVC Gridview custom sort based on selected rows 【发布时间】:2016-08-31 04:19:19 【问题描述】:我想弄清楚如何将我选择的行带到网格的顶部。非常重要的是我使用的是 DevExpress Asp.Net MVC GridView。
我有以下内容,这是我将几十个非解决方案混合在一起的最佳尝试。请注意 cmets:
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
更新:代码示例:
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】:您有几个选项可用于解决您的特定问题。
您需要将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
列运行,您可以采用最简单的方法,通过将排序设置为降序,将选中的列设置为显示在顶部。 (真 = 1,假 = 0)
settings.Columns.Add("ColumnName").SortOrder = DevExpress.Data.ColumnSortOrder.Descending;
以下资源可能很有用。
看看这个Row Selection
看看这个Sorting
【讨论】:
好吧,我可以让我的自定义排序列真正变得任何东西。它刚刚被放入,所以我可以手动调用一个 Customrow.Sort() 方法,该方法将按选择进行排序。谢谢你。为您提供 200 个互联网。 更新:虽然您的代码编译得很好。网格视图实际上并未在此列上排序。 用您尝试过的内容更新帖子,等我回来再看看。你有没有看链接。马上阿夫克 谢谢。是的,我做到了。我在这些页面上使用了指南。 @JuannStrauss,在CustomColumnSort
中放置一个断点并逐步执行。检查它是否正在处理排序。您是否尝试过第二个建议。【参考方案2】:
我向 DevExpress 的支持团队提出了这个问题。他们的反馈是,就我而言,我使用的数据库服务器模式不支持自定义排序。所以,我的代码是正确的,因为如果不使用服务器模式,我将如何实现自定义排序。
希望这可以帮助某人并节省他们几个小时的调试时间。
【讨论】:
以上是关于基于所选行的 Devexpress MVC Gridview 自定义排序的主要内容,如果未能解决你的问题,请参考以下文章