2012-02-16 5 views
0

日付時刻値を持つ列の1つを含むTelerikグリッドがありますが、フィルターはデフォルトで日付のみを受け入れるため、そのフィールドのフィルターは機能しません。 telerikグリッドフィルタに時間を含めることはできますか?ここでTelerikグリッドフィルターが日付列で機能しない

は私のコードは次のとおりです。

Html.Telerik()グリッド()

 .Name("FilesGrid") 
     .Sortable(sorting => sorting.OrderBy(sortOrder => sortOrder.Add(o => o.COL1))) 
     .Pageable(paging => 
      paging.PageSize(10) 
        .Style(GridPagerStyles.NextPreviousAndNumeric) 
        .Position(GridPagerPosition.Bottom) 
     ).Filterable() 
     .Groupable() 
     .Selectable() 
     .Resizable(c => c.Columns(true)) 
     .DataBinding(dataBinding => dataBinding. 
      Ajax() 
       .Select("_Grid", "Files") 
       .Update("_ClientUpdate", "Todos") 
       .Insert("_ClientInsert", "Todos") 
       .Delete("Delete", "Files")) 
         .EnableCustomBinding(true) 
     .Columns(columns => 
     { 
      columns.Bound(c => c.col1); 
      columns.Bound(c => c.col2); 
      columns.Bound(c => c.col3); 
      columns.Bound(c => c.CreatedAt); -------- this column is datetime but filter only has date calendar , hence the filter wont work 
     .ClientEvents(events => events.OnDataBound("onGridDataBound")) 
%> 
+0

フィルタ式Telerik providを上書きする必要がありますあなたが探しているものを正確に文書化した例です:http://www.telerik.com/help/aspnet-ajax/grid-filtering-for-griddatetimecolumn-with-dataformatstring.html –

答えて

0

私はそれが古いポストを知っているが、私はそれらの人々がそれ

を検索するためのソリューションを配置します

私はこのソリューションをカスタマイズしました。すべてのシナリオで動作し、複数の列に日付時間フィルタがある場合にも使用できます。データソースイベントでこの関数を使用します。 最初にこの関数をコードに入れます。

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 

が楽しむようにそれを使用することができ、この

Dim filter As String = grdReport.MasterTableView.FilterExpression 
      If (filter.contains("LAST_UPD_DATE")) Then 
       manageDateFilter("LAST_UPD_DATE", source, filter, 6) 
      End If 

のようなグリッドのためのマルチ日付列の必要データソースイベントからそれを呼び出す:)

0
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; 
       } 
      } 
     } 
    } 
関連する問題