首页 文章

过滤未与DataField绑定的GridBoundColumn

提问于
浏览
0

我正在尝试为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等 . 有人可以指导我们如何阻止这样的选择吗?

1 回答

  • 0

    您可以通过一些简单的Javascript代码并向RadGrid添加一些组件来实现此目的 .

    Javascript


    <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>
    

    ASP.NET


    <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" />
    

相关问题