如何在Kendo UI Grid上顯示任何應用的過濾標準。 我想有一個只讀的顯示,適用的標準。 當前的功能確實允許用戶應用過濾器,但用戶必須轉到過濾器菜單才能查找過濾器的詳細信息。我想在Kendo UI Grid上顯示應用的過濾標準
4
A
回答
8
劍道UI數據源沒有過濾器的事件,所以你需要實現自己。然後,當事件被觸發時,您可以獲取當前過濾器並以您希望顯示的任何方式對其進行格式化。
例如:
var grid = $("#grid").kendoGrid(...);
// override the original filter method in the grid's data source
grid.dataSource.originalFilter = grid.dataSource.filter;
grid.dataSource.filter = function() {
var result = grid.dataSource.originalFilter.apply(this, arguments);
if (arguments.length > 0) {
this.trigger("afterfilter", arguments);
}
return result;
}
// bind to your filter event
grid.dataSource.bind("afterfilter", function() {
var currentFilter = this.filter(); // get current filter
// create HTML representation of the filter (this implementation works only for simple cases)
var filterHtml = "";
currentFilter.filters.forEach(function (filter, index) {
filterHtml += "Field: " + filter.field + "<br/>" +
"Operator: " + filter.operator + "<br/>" +
"Value: " + filter.value + "<br/><br/>";
if (currentFilter.filters.length > 1 && index !== currentFilter.filters.length - 1) {
filterHtml += "Logic: " + currentFilter.logic + "<br/><br/>";
}
});
// display it somewhere
$("#filter").html(filterHtml);
});
參見demo here。
注意,過濾器可以被嵌套,所以一旦出現這種情況,這個例子的代碼是不夠的 - 你必須作出這樣的轉換過濾器,HTML遞歸的代碼。
爲了增強所有數據源與「後過濾器」事件,你必須改變的數據源protototype而不是改變它在你的實例:
kendo.data.DataSource.fn.originalFilter = kendo.data.DataSource.fn.filter;
kendo.data.DataSource.fn.filter = function() {
var result = this.originalFilter.apply(this, arguments);
if (arguments.length > 0) {
this.trigger("afterfilter", arguments);
}
return result;
}
如果你想整個事情納入所有網格窗口小部件,你可以創建一個新的方法filtersToHtml
它可以讓你的HTML represenatation並將其添加到kendo.data.DataSource.fn
像上面證明(或者你可以從劍道的網格衍生create your own widget);以同樣的方式,你可以添加一個方法displayFilters
到kendo.ui.Grid.fn
(網格原型),它將這個HTML表示顯示在一個DOM元素中,它的選擇器可以將你的小部件的選項傳入(你最終也可以在網格小部件中創建這個元素)。然後,您可以改爲使用displayFilters
來代替在過濾器方法中觸發「afterfilter」。
考慮到總是顯示過濾器的完整實現的複雜性,我建議擴展Kendo網格,而不是簡單地修改原始代碼。這將有助於保持這種可維護性並使其具有一定的結構。
0
如何組合兩個網格過濾器。 用這種方式,用戶可以在文本框中看到選定的過濾器,甚至通過點擊過濾列文本框上的「x」按鈕將其刪除。
你可以通過設置過濾格這樣
filterable: {
mode: "menu, row"
}
的文檔和示例做,這是在here
相關問題
- 1. kendo UI Grid Grid Timespan過濾
- 2. Kendo UI Grid - 顯示行號
- 3. 簽名在Kendo UI Grid中應用的過濾器ColumnMenu
- 4. 在Kendo UI Grid TD上應用'data-title'?
- 5. 自定義列過濾器kendo ui grid
- 6. Kendo UI上的日期過濾器Angular 2 Grid
- 7. 動態列上的Kendo Grid過濾器
- 8. Kendo UI Grid一列不顯示數據
- 9. Kendo UI Grid沒有顯示JSON數據
- 10. 在Kendo Grid中隱藏列但顯示其過濾器
- 11. kendo-ui網格過濾器圖標不顯示
- 12. 在Kendo UI Grid中設置過濾器的預定義值
- 13. Kendo UI Grid,Durandal
- 14. 如何強制Kendo Grid在列上使用數字過濾器
- 15. Kendo UI Grid - 鏈接上的顯示網格點擊
- 16. 如何在Kendo UI Grid中修改過濾器?
- 17. Kendo UI Grid Grid模板
- 18. Kendo UI Grid Grid模板
- 19. Kendo Grid過濾器全球化
- 20. KendoUI Grid - 過濾器沒有顯示
- 21. Kendo UI Grid - 如何捕獲過濾器觸發的事件
- 22. 在Kendo UI MVC Grid上排序
- 23. Kendo UI在Grid內部上傳
- 24. 如何在kendo-grid加載時顯示kendo加載圖標?
- 25. kendo UI Grid in angularjs
- 26. Kendo ui grid if else
- 27. 過濾Kendo Grid中的每個字符
- 28. Kendo Grid不顯示數據
- 29. 在Kendo UI網格組標題上過濾
- 30. 如何過濾文件kendo-ui上傳?
我怎麼能有這樣的邏輯作爲網格本身的一部分。使用這個例子,我將必須爲我使用的每個網格都有這個自定義邏輯。 我想顯示應用的過濾器作爲網格本身的一部分。所以基本上必須擴展網格功能。 –
@Kish_ore我用一些想法更新了我的答案,這些想法應該允許你實現你之後的想法 –
我已經在JS中包含了一個KendoGridExtension類來爲網格添加附加功能(持久複選框等)。 –