对于telerik Radgrid,我们获取过滤列的默认值。但我需要为不同的列提供不同的过滤选项。
我可以删除一些像这样的选项
loc-args
但是这里的问题是所有列都删除了过滤器选项。我需要针对不同列的不同过滤器选项。 服务器端选项是首选。 提前致谢
答案 0 :(得分:0)
直接来自Telerik:这不可能使用服务器端代码。您必须使用上面链接中的客户端示例(粘贴在下面):
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
var column = null;
function MenuShowing(sender, args) {
if (column == null) return;
var menu = sender; var items = menu.get_items();
if (column.get_dataType() == "System.String") {
var i = 0;
while (i < items.get_count()) {
if (!(items.getItem(i).get_value() in { 'NoFilter': '', 'Contains': '', 'NotIsEmpty': '', 'IsEmpty': '', 'NotEqualTo': '', 'EqualTo': '' })) {
var item = items.getItem(i);
if (item != null)
item.set_visible(false);
}
else {
var item = items.getItem(i);
if (item != null)
item.set_visible(true);
} i++;
}
}
if (column.get_dataType() == "System.Int64") {
var j = 0; while (j < items.get_count()) {
if (!(items.getItem(j).get_value() in { 'NoFilter': '', 'GreaterThan': '', 'LessThan': '', 'NotEqualTo': '', 'EqualTo': '' })) {
var item = items.getItem(j); if (item != null)
item.set_visible(false);
}
else { var item = items.getItem(j); if (item != null) item.set_visible(true); } j++;
}
}
column = null;
menu.repaint();
}
function filterMenuShowing(sender, eventArgs) {
column = eventArgs.get_column();
}
</script>
</telerik:RadCodeBlock>
<telerik:RadGrid...>
//Additional markup removed
<FilterMenu OnClientShowing="MenuShowing" />
</telerik:RadGrid>
Telerik的解释:
服务器端有一个过滤菜单对象。不是全部 项目出现在客户端的每个过滤器菜单中....过滤菜单对每个过滤菜单都是独立的 RadGrid中的列 - 这意味着过滤菜单选项会有所不同 相应列的DataType ....但是,如果删除了一些选项 从服务器上的菜单,这将影响所有网格列和 它们将从每个列过滤器菜单选项中删除(如果 对于该类型的列,默认情况下可用。)
答案 1 :(得分:0)
首先,当您需要访问Column Name时,可以将其添加到filterMenuShowing
函数中。或者通过get_uniqueName()
上的column
访问它。
var column = null;
var columnName = null;
function MenuShowing(sender, args) {
if (column == null) return;
if (columnName == null) return;
var menu = sender; var items = menu.get_items();
if (columnName == "Date") { // If the column name is Date
var i = 0;
while (i < items.get_count()) {
if (!(items.getItem(i).get_value() in { 'NoFilter': '', 'Contains': '', 'GreaterThan': '', 'LessThan': '' })) {
var item = items.getItem(i);
if (item != null){
item.set_visible(false);
}
}
else { // Not mandatory.
var item = items.getItem(i);
if (item != null){
item.set_visible(true);
}
} i++;
}
}
else {
if (columnName == "Name") {
var j = 0;
while (j < items.get_count()) {
if (!(items.getItem(j).get_value() in { 'NoFilter': '', 'Contains': '', 'StartsWith': '', 'EndsWith': '' })) {
var item = items.getItem(j);
if (item != null){
item.set_visible(false);
}
}
else { // Not mandatory.
var item = items.getItem(j);
if (item != null){
item.set_visible(true);
}
} j++;
}
}
}
column = null;
columnName = null;
}
function filterMenuShowing(sender, eventArgs) {
column = eventArgs.get_column();
columnName = eventArgs.get_column().get_uniqueName();
}
您需要将您的功能链接到正确的客户端事件,如文档中所示。
<ClientSettings>
<Scrolling AllowScroll="false" />
<ClientEvents OnFilterMenuShowing="filterMenuShowing" />
</ClientSettings>
和
<FilterMenu OnClientShowing="MenuShowing" />