我正在尝试为GridBoundColumn实现过滤功能。这是我的Grid的样子
<telerik:RadGrid ID="radSelect" runat="server" AllowFilteringByColumn="True" AllowPaging="True"
AutoGenerateColumns="False" ResolvedRenderMode="Classic">
<MasterTableView AllowNaturalSort="False" DataKeyNames="EmployeeInfoID,DateOfBirth" ClientDataKeyNames="EmployeeInfoID,DateOfBirth" >
<Columns>
<telerik:GridBoundColumn DataType="System.Int16" FilterControlAltText="Filter Age column"
HeaderText="Age" UniqueName="Age" CurrentFilterFunction="LessThan">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
我正在根据从数据库以编程方式接收的DateOfBirth值设置Age Column中的值。我想在Age Column上实现各种过滤选项,例如GreaterThan,LessThan,Between等。有人可以指导我们如何阻止这样的选择吗?
答案 0 :(得分:0)
您可以通过一些简单的Javascript代码并向RadGrid添加一些组件来实现此目的。
<telerik:RadCodeBlock ID="RadCodeBlock" 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 ID="rgTest" runat="server" AllowFilteringByColumn="true" AllowSorting="true">
<ClientSettings>
<ClientEvents OnFilterMenuShowing="filterMenuShowing()" />
</ClientSettings>
<MasterTableView>
<Columns>
<telerik:GridBoundColumn DataField="due_date" DataType="System.DateTime"
FilterControlAltText="Filter Due Date Column" HeaderText="Due Date"
AutoPostBackOnFilter="false" DataFormatString="{0:MM/dd/yyyy}" />
</Columns>
<FilterMenu OnClientShowing="MenuShowing()" />
</MasterTableView>
</telerik:RadGrid>
我到目前为止还不是专家,但这个解决方案适合我。您必须调整它以匹配您要查找的内容。我希望这有帮助!
看来您不必使用JavaScript来实现这一目标。 RadGrid将处理菜单。以下是该列的更新示例,其他所有内容保持不变:
<telerik:GridBoundColumn FilterControlWidth="95px" DataField="ShippedDate" HeaderText="Shipped Date" PickerType="DatePicker" EnableRangeFiltering="true" />