我在 MVC 中实现 Devexpress 网格控制。我被困在我需要javascript中当前的排序依据列和排序顺序(asc/desc)的地方。我还尝试了客户端事件OnColumnSortingChanged(s , e),它仅在单击事件时提供列的名称,而不是来自 gridview javascript 对象。
2 回答
经过研究得到答案...
必须将 CustomJsProperty 添加到部分视图中的控件,如下所示
settings.CustomJSProperties = (s, e) =>
{
var Grid = s as MVCxGridView;
var result = new System.Collections.Hashtable();
foreach (var col in Grid.AllColumns)
{
var dataCol = col as GridViewDataColumn;
if (dataCol != null)
{
if (dataCol.SortIndex == 0)
{
e.Properties["cpColumnsProp"] = new Dictionary<string, object>()
{
{ "sortcolumn", dataCol.FieldName },
{ "sortorder", ((Convert.ToString(dataCol.SortOrder).Equals("Ascending")) ? "asc" : "desc")}
};
}
}
}
};
如下处理 ColumnSortingChange 事件
function gvChartList_OnColumnSortingChanged(s, e) {
$("#hdsortname").val(e.column.fieldName); // contains the sort column name
$("#hdsortorder").val(((s.cpColumnsProp.sortcolumn == e.column.fieldName) ? "desc" : "asc")); // contains the sort column order
}
最后但并非最不重要的一点是,必须为列定义默认排序索引和排序顺序
settings.Columns.Add(col =>
{
// column details
col.SortIndex = 0;
col.SortAscending();
});
我最近需要类似的,我想保存列顺序、排序顺序和过滤信息;这样用户就可以创建已保存的网格视图,而不必不断重新输入所有这些首选项。
我发现在CustomJSPropeties事件中,我可以与作为 ASPxGridView 的发送者进行交互,这样我就可以从ASPxGridView.SaveClientLayout()中获取所需的值。FilterExpression 和 VisibileRowCount 在这里也很有用 - 如果您想使用过滤器表达式进行导出,但仅当 VisibleRowCount 小于某个阈值时(这是显示在页面底部区域的行数)
settings.CustomJSProperties = (s, e) =>
{
ASPxGridView gridView = (ASPxGridView)s;
e.Properties["cpGridFilterExpression"] = gridView.FilterExpression; //Make Filter Expressions Availabe to JavaScript
e.Properties["cpVisibleRowCount"] = gridView.VisibleRowCount; //Make Visible Row Count Availabe to JavaScript
e.Properties["cpLayout"] = gridView.SaveClientLayout(); //Get Layout String and make it available to JavaScript
};
那么这有什么作用呢?此事件中定义的属性可用作 javascript 网格视图对象的属性。所以在这里我们尽可能地获取这些值,并将它们放在我们通常无法访问它们的地方。
然后,我们现在可以直接从 JavaScript 访问 GridView.cpLayout(其中 GridView 是提供给您的网格的名称/ID。)
<script type="text/javascript">
$(document).ready(function () {
$('#saveButton').click(
function () {
var layout = GridView.cpLayout;
//Perform Save...
}
);
});
</script>
需要明确的是,这个“布局”包含排序顺序、可见列信息和过滤器信息。
布局:
https://documentation.devexpress.com/#AspNet/CustomDocument4342
自定义JS属性:
注意:我在此处添加此解决方案,因为这是我在搜索问题时发现的。如您所见,这些是在 CustomJSProperties 事件处理程序中访问 AspxGridView(基础)或 MVCGridView 的类似主题。