Grid Telerik网格过滤器在日期列上不工作

Grid Telerik网格过滤器在日期列上不工作,grid,telerik,Grid,Telerik,我有一个Telerik网格,其中一列有日期时间值,但该字段上的过滤器不起作用,因为过滤器默认只接受日期。 我们有没有办法将时间包含在telerik网格过滤器中 这是我的密码: Html.Telerik().Grid() 我知道这是一个老帖子,但我会为那些搜索它的人提供一个解决方案 我已经定制了这个解决方案,它适用于所有场景,如果您有多个列,您也可以使用它。如果您有一个日期时间过滤器,请在需要数据源事件中使用此功能 首先把这个函数放在代码中 Protected Sub manageDateFi

我有一个Telerik网格,其中一列有日期时间值,但该字段上的过滤器不起作用,因为过滤器默认只接受日期。 我们有没有办法将时间包含在telerik网格过滤器中

这是我的密码:

Html.Telerik().Grid()


我知道这是一个老帖子,但我会为那些搜索它的人提供一个解决方案

我已经定制了这个解决方案,它适用于所有场景,如果您有多个列,您也可以使用它。如果您有一个日期时间过滤器,请在需要数据源事件中使用此功能 首先把这个函数放在代码中

  Protected Sub manageDateFilter(ByVal columnName As String, ByVal source As Object, ByVal filter As String, ByVal columnindex As Integer)


        Select Case DirectCast(DirectCast(source, Telerik.Web.UI.RadGrid).Columns.Item(columnindex), Telerik.Web.UI.GridDateTimeColumn).CurrentFilterFunction
            Case GridKnownFunction.EqualTo
                Dim date1 As datetime = convert.todatetime(DirectCast(DirectCast(source, Telerik.Web.UI.RadGrid).Columns.Item(columnindex), Telerik.Web.UI.GridDateTimeColumn).CurrentFilterValue)


                grdReport.MasterTableView.FilterExpression = filter.replace("([" + columnName + "] = " + filter.substring(filter.indexof(columnName) + (columnName.length + 4)).trim().substring(0, filter.substring(filter.indexof(columnName) + (columnName.length + 4)).indexof("M") + 2) + ")".trim(), "([" + columnName + "] >= '" + date1.tostring() + "') AND ([" + columnName + "] < '" + date1.adddays(1).tostring() + "')")

            Case GridKnownFunction.NotEqualTo
                Dim date1 As datetime = convert.todatetime(DirectCast(DirectCast(source, Telerik.Web.UI.RadGrid).Columns.Item(columnindex), Telerik.Web.UI.GridDateTimeColumn).CurrentFilterValue)


                grdReport.MasterTableView.FilterExpression = filter.replace("([" + columnName + "] <> " + filter.substring(filter.indexof(columnName) + (columnName.length + 4)).trim().substring(0, filter.substring(filter.indexof(columnName) + (columnName.length + 5)).indexof("M") + 2) + ")".trim(), "(([" + columnName + "] < '" + date1.tostring() + "') OR ([" + columnName + "] >= '" + date1.adddays(1).tostring() + "'))")

            Case GridKnownFunction.GreaterThanOrEqualTo
                Dim date1 As datetime = convert.todatetime(DirectCast(DirectCast(source, Telerik.Web.UI.RadGrid).Columns.Item(columnindex), Telerik.Web.UI.GridDateTimeColumn).CurrentFilterValue)


                grdReport.MasterTableView.FilterExpression = filter.replace("([" + columnName + "] >= " + filter.substring(filter.indexof(columnName) + (columnName.length + 4)).trim().substring(0, filter.substring(filter.indexof(columnName) + (columnName.length + 4)).indexof("M") + 2) + ")".trim(), "([" + columnName + "] >= '" + date1.tostring() + "')")

            Case GridKnownFunction.LessThanOrEqualTo
                Dim date1 As datetime = convert.todatetime(DirectCast(DirectCast(source, Telerik.Web.UI.RadGrid).Columns.Item(columnindex), Telerik.Web.UI.GridDateTimeColumn).CurrentFilterValue)


                grdReport.MasterTableView.FilterExpression = filter.replace("([" + columnName + "] <= " + filter.substring(filter.indexof(columnName) + (columnName.length + 4)).trim().substring(0, filter.substring(filter.indexof(columnName) + (columnName.length + 5)).indexof("M") + 2) + ")".trim(), "([" + columnName + "] <= '" + date1.adddays(1).tostring() + "') ")

            Case GridKnownFunction.GreaterThan
                Dim date1 As datetime = convert.todatetime(DirectCast(DirectCast(source, Telerik.Web.UI.RadGrid).Columns.Item(columnindex), Telerik.Web.UI.GridDateTimeColumn).CurrentFilterValue)


                grdReport.MasterTableView.FilterExpression = filter.replace("([" + columnName + "] > " + filter.substring(filter.indexof(columnName) + (columnName.length + 4)).trim().substring(0, filter.substring(filter.indexof(columnName) + (columnName.length + 4)).indexof("M") + 2) + ")".trim(), "([" + columnName + "] >= '" + date1.adddays(1).tostring() + "') ")

        End Select
对于“多日期”列,您可以这样使用它

Dim filter As String = ReportGrid.MasterTableView.FilterExpression
            If (filter.contains("START_DATE")) Then
                manageDateFilter("START_DATE", source, filter, 5)
            End If
            filter = ReportGrid.MasterTableView.FilterExpression
            If (filter.contains("END_DATE")) Then
                manageDateFilter("END_DATE", source, filter, 6)
            End If

享受:)

您将不得不覆盖过滤器表达式,Telerik在其文档中提供了一个示例,确切地说明了您要查找的内容:
Dim filter As String = grdReport.MasterTableView.FilterExpression
            If (filter.contains("LAST_UPD_DATE")) Then
                manageDateFilter("LAST_UPD_DATE", source, filter, 6)
            End If
Dim filter As String = ReportGrid.MasterTableView.FilterExpression
            If (filter.contains("START_DATE")) Then
                manageDateFilter("START_DATE", source, filter, 5)
            End If
            filter = ReportGrid.MasterTableView.FilterExpression
            If (filter.contains("END_DATE")) Then
                manageDateFilter("END_DATE", source, filter, 6)
            End If
protected void ItemsRadGrid_ItemCommand(object source, GridCommandEventArgs e)
    {
        if (e.CommandName == RadGrid.FilterCommandName)
        {
            try
            {
                FillItemsGrid();
                FilterByDate(ItemsRadGrid, e);
            }
            catch (Exception ex)
            {
                //ExceptionLogClass.InsertError(ex);
            }

        }

    }

public static void FilterByDate(RadGrid grid, GridCommandEventArgs e)
    {
        Pair filterPair = e.CommandArgument as Pair;
        string columnName = Convert.ToString(filterPair.Second);
        if (filterPair.First.ToString() == "NoFilter")
        { }
        else
        {
            if (grid.Columns.FindByDataField(columnName).DataType.Name == "DateTime")
            {
                try
                {
                    TextBox FilterColumnField = ((TextBox)((GridFilteringItem)e.Item)[columnName].Controls[0]);
                    string oldDate = FilterColumnField.Text;
                    FilterColumnField.Text = DateTime.ParseExact(FilterColumnField.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture).ToString("MM/dd/yyyy 12:00:00 tt");
                }
                catch (FormatException)
                {
                    e.Canceled = true;
                }
            }
        }
    }