8

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

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

但是,我的某些列不可过滤,因此我想隐藏过滤器。

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

4

5 回答 5

16

在您的代码中,您可能有类似的内容:

<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>
于 2013-01-08T22:13:38.310 回答
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");
于 2013-01-25T18:14:03.847 回答
1

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

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

于 2013-01-08T20:25:20.213 回答
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();
于 2013-01-09T02:16:45.303 回答
0

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

例如。

字段:“Margin01”,宽度:40,可过滤:false,标题:“0-”

于 2015-01-06T16:46:38.860 回答