MVC.NET で KENDO UI グリッドを使用しています。
グリッドは、列ごとに列フィルターを表示するように構成されています。
ただし、一部の列はフィルター処理できないため、フィルターを非表示にしたいと考えています。
これを C# 側から構成する方法はありますか? (CSS や JS は使用していません)。
MVC.NET で KENDO UI グリッドを使用しています。
グリッドは、列ごとに列フィルターを表示するように構成されています。
ただし、一部の列はフィルター処理できないため、フィルターを非表示にしたいと考えています。
これを C# 側から構成する方法はありますか? (CSS や JS は使用していません)。
コードには、おそらく次のようなものがあります。
<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 つの方法を次に示します。
$("#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");
私の知る限り、columns.filterable
デフォルトで「true」に設定されているため、フィルタリングしたくない列の構成プロパティを「false」に設定できる必要があります(ドキュメント:columns.filterableを参照)
C# 側からこれを実行できるかどうかは、コードで Kendo Grid がどのように初期化されているかによって異なります。
質問では言及しませんでしたが、グリッドの AutoGenerate() 機能を使用していたため、Filterable設定に簡単にアクセスできません。
その場合の 1 つの回避策は次のとおりです。
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();