我正在MVC中实现Devexpress Grid Control。我遇到了需要当前排序依据列和javascript中排序顺序(asc / desc)的点。我还尝试了clientSide事件 OnColumnSortingChanged(s,e),它只在click事件中提供列的名称而不是gridview javascript对象。
答案 0 :(得分:1)
研究后得到了答案......
必须在局部视图中将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();
});
答案 1 :(得分:0)
我最近需要类似的,我想保存列顺序,排序顺序和过滤信息;这样用户可以创建网格的已保存视图,而不必继续重新输入所有这些首选项。
我发现,在一个事件的 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
<强> CustomJSProperties:强>
注意:我在这里添加此解决方案,因为这是我在搜索问题时发现的。可以看到,这些是在CustomJSProperties事件处理程序中访问AspxGridView(base of)或MVCGridView的类似主题。