私は、選択に基づいてグリッドデータソースをフィルタリングするために使用される、ツールバーに3つのマルチセレクションコントロールを含むグリッドを持っています。 マルチ選択ドロップダウンによるカスタムフィルタリング
現時点では、マルチセレクションコントロールのchange
イベントで発生した以下の機能があります。この関数は、マルチセレクションコントロールで選択された項目が変更された(field
)をフィルタリング中に使用することを承諾します(values
)。予想通り、フィルタリングは、個々の複数選択の選択と微細であり、すなわち、複数のメソッドを選択するときのみor
ロジックを使用
function applyClientFilters(values, filterID) {
var grid = $("#grid").data("kendoGrid");
var gridDataSource = grid.dataSource;
var filter = gridDataSource.filter();
// does the selected drop down contain a value
// if yes, then apply this filter to the necessary drop down
// otherwise remove the filter
if (values.length > 0) {
// has a filter been setup yet on the datasource?
if (filter && filter.filters.length > 0) {
// firstly check to see if filter has already been applied and if so remove
for (var i = 0; i < filter.filters.length; ++i) {
// check to see if filter field already exists i.e. analyte has already been filtered
// and check to see if the value at this field already exists as a filtered item
if (filter.filters[i].field === filterID && values.indexOf(filter.filters[i].value) > -1) {
filter.filters.splice(i, 1);
}
}
// apply new filter(s)
for (var i = 0; i < values.length; ++i) {
filter.filters.push({ field: filterID, operator: "eq", value: parseInt(values[i]) });
}
gridDataSource.query({
filter: filter,
pageSize: 10,
page: 1,
group: [{
field: "InstrumentName",
dir: "asc"
}, {
field: "AnalyteName",
dir: "asc"
}, {
field: "MethodName",
dir: "asc"
}]
});
}
else {
// apply new filter
gridDataSource.filter({
logic: "or",
filters: [
{
field: filterID,
operator: "eq",
value: parseInt(values),
}
]
});
}
} else {
if (filter && filter.filters.length > 0) {
// remove existing filter
for (var i = 0; i < filter.filters.length; ++i) {
if (filter.filters[i].field === filterID) {
filter.filters.splice(i, 1);
}
}
gridDataSource.query({
filter: filter,
pageSize: 10,
page: 1,
group: [{
field: "InstrumentName",
dir: "asc"
}, {
field: "AnalyteName",
dir: "asc"
}, {
field: "MethodName",
dir: "asc"
}]
});
}
}
}
は、それらをフィルタリングします。ただし、異なるマルチセレクション制御で使用する場合、ロジックはand
である必要があります。
例
- を選択し '分析物A' - 表示のみ 'の検体A'
- 選択 'メソッドA' へ>フィルタグリッドデータソース] - > [フィルタグリッドのデータソースが表示する '分析物A' そして 'メソッドA'
- 選択 'メソッドB' - > 'の分析物A' と 'メソッドA' または '方法B' を表示するには、グリッドのデータソースをフィルタリング
上記のシナリオを達成するために、フィルタ論理演算子と剣道データソースフィルタリングを組み合わせることは可能ですか?