MVC4 Devexpress排序,分组和过滤不工作

MVC4 Devexpress Sorting, Grouping and Filtering not working

本文关键字:过滤 工作 Devexpress 排序 MVC4      更新时间:2023-09-26

我正在开发devexpress,遇到了一些问题。下面是我的代码:

settings.Columns.Add(column =>
{
    column.Caption = "Code";
    column.Settings.AllowGroup = DefaultBoolean.True;
    column.SetDataItemTemplateContent(c =>
    {
        ViewContext.Writer.Write(DataBinder.Eval(c.DataItem, "Code"));
    });
    column.SetEditItemTemplateContent(c =>
    {
        if (DataBinder.Eval(c.DataItem, "Code") != null)
        {
            ViewContext.Writer.Write(DataBinder.Eval(c.DataItem, "Code"));
        }
        else
        {
            Html.DevExpress().TextBox(textBox =>
            {
                textBox.Width = Unit.Percentage(100);
                textBox.Name = "Code";
            }).Render();
        }
    });
});

我添加这样的列,它显示正确的值,但排序或分组或过滤不工作。我如何使这些功能工作?请帮助! !

您缺少列的FieldName,这是Grid绑定到的数据源中的列或属性的名称:

column.FieldName = "Code";

允许控件知道将筛选和排序哪个字段。此外,您可能需要允许排序和过滤:

column.Settings.AllowSort = DefaultBoolean.True;  // I think this is the default
column.Settings.AllowHeaderFilter = DefaultBoolean.True;

如果需要定义其他过滤选项,还可以在网格设置中设置HeaderFilterFillItems方法,并在事件参数中修改Values集合:

gridSettings.HeaderFilterFillItems = (sender, e) =>
{
    if (e.Column.FieldName.Equals("Code")) {
        e.Values.Clear();
        e.AddValue("DisplayOption", "Value", "Query");
        // ...
    }
};

UPDATE:如果您的列有自定义数据,那么它是未绑定的,并且您可以使用事件CustomColumnUnboundData来定义列的值,这也将用于过滤/排序网格:

// Same column definition as yours
settings.Columns.Add(column =>
{
    column.Caption = "Code";
    column.Settings.AllowGroup = DefaultBoolean.True;
    column.SetDataItemTemplateContent(c =>
    {
    ViewContext.Writer.Write(DataBinder.Eval(c.DataItem, "Code"));
    });
    column.SetEditItemTemplateContent(c =>
    {
        if (DataBinder.Eval(c.DataItem, "Code") != null)
        {
            ViewContext.Writer.Write(DataBinder.Eval(c.DataItem, "Code"));
        }
        else
        {
            Html.DevExpress().TextBox(textBox =>
            {
                textBox.Width = Unit.Percentage(100);
                textBox.Name = "Code";
            }).Render();
        }
    });
});
// CustomUnboundColumnData event handler
settings.CustomUnboundColumnData = (sender, e) => {
    if(e.Column.Caption.Equals("Code")) {
        // You can get the value of any existing field in the datasource, this way:
        string code= (string)e.GetListSourceFieldValue("Code");
        // Do some processs to get the custom value
        // ...
        // And set it to the Value propery of the event args parameter
        e.Value = myCustomValue;
    }
};

您可以在此链接中找到未绑定数据的示例:https://www.devexpress.com/Support/Center/Example/Details/E2824