MVC中的KENDOUI网格:有没有办法在某些列上隐藏过滤器?

时间:2013-01-08 20:15:35

标签: kendo-ui

我在MVC.NET中使用KENDO UI网格。

网格配置为显示每列的列过滤器。

但是我的一些列不可过滤,所以我想隐藏过滤器。

有没有办法从C#端配置? (不使用CSS或JS)。

5 个答案:

答案 0 :(得分:15)

在你的代码中,你可能有类似的东西:

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<%: Html.Kendo().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.ProductID).Groupable(false);
        columns.Bound(p => p.ProductName);
        columns.Bound(p => p.UnitPrice);
        columns.Bound(p => p.UnitsInStock);
    })
    .Groupable()
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Products_Read", "Grid"))
    )
%>
</asp:Content>

如果您希望ProductID列无法过滤,请说:

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<%: Html.Kendo().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.ProductID).Groupable(false).Filterable(false);
        columns.Bound(p => p.ProductName);
        columns.Bound(p => p.UnitPrice);
        columns.Bound(p => p.UnitsInStock);
    })
    .Groupable()
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Products_Read", "Grid"))
    )
%>
</asp:Content>

答案 1 :(得分:3)

如果您没有设置列,则可以在网格初始化后隐藏过滤器按钮,例如在数据绑定事件中。这是一种方法,将过滤器按钮隐藏在特定字段上:

$("#MyGrid").find(".k-header[data-field='Pct_positive']").find(".k-grid-filter").css("visibility","hidden");

隐藏所有......

$("#MyGrid").find(".k-header").find(".k-grid-filter").css("visibility","hidden");

答案 2 :(得分:1)

据我所知,您必须能够为那些您不想过滤的列将columns.filterable配置属性设置为'false',因为它默认为'true'(请参阅文件:columns.filterable

是否可以从C#端执行此操作取决于如何在代码中初始化Kendo Grid。

答案 3 :(得分:0)

我没有在问题中提及它,但是我使用了网格的AutoGenerate()功能,因此无法轻松访问 Filterable 设置。

该案例的一个解决方法是:

var gb = Html.Kendo().Grid(data).Name("test");
gb.Columns(columns => { columns.AutoGenerate(true); });

// !!! Hide filter for first column in grid.
gb.Columns( (columns) => { (columns.Container.Columns[0] as IGridBoundColumn).Filterable=false;  });

gb.Filterable(filtering => filtering.Enabled(true));

gb.DataSource(ds => ds
                .Ajax()
                .ServerOperation(true)
                .Model(model => model.Id("A"))
                );
gb.Render();

答案 4 :(得分:0)

对于客户端(jquery)kendo网格,你可以将filterable:false,对于整个网格放置filterable:true后的单个列。

例如

字段:&#34; Margin01&#34;, 宽度:40, 可过滤的:假的, 标题:&#34; 0 - &#34;