2010-12-03 2 views
5

Ich benutze Telerik Grid. Ich muss einen Filter für alle Spalten in meinem Raster anwenden. Momentan passe ich die Filteroption mit dem folgenden Code an. Mit dem folgenden Code entferne ich die bestimmten Elemente für alle Spalten. Aber für eine Datumsspalte könnte mir jemand sagen, was die möglichen Filteroptionen im Raster sind und wie man diese Filteroptionen anpassen kann?passen Sie die Filteroption für ein Datum colmn Telerik Gitter

Code hinter

protected void RGVTest_Init(object sender, EventArgs e) 
    { 

     GridFilterMenu menu = RGVTest.FilterMenu; 
     int i = 0; 
     while (i < menu.Items.Count) 
     { 
      if (menu.Items[i].Text == "Between" || 
       menu.Items[i].Text == "NotBetween") 
      { 
       menu.Items.RemoveAt(i); 
      } 
      else 
      { 
       i++; 
      } 
     } 
    } 

* Aspx: *

<telerik:RadGrid ID="RGVTest" runat="server" Skin="Vista" AllowPaging="True" 
      AllowFilteringByColumn="true" AllowSorting="true" GridLines="None" OnItemCommand="RGVTest_ItemCommand" 
      PageSize="10" OnNeedDataSource="RGVTest_NeedDataSource" OnItemDataBound="RGVTest_ItemDataBound" 
      OnInit="RGVTest_Init"> 
      <GroupingSettings CaseSensitive="false" /> 
      <PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="true" /> 
      <MasterTableView AutoGenerateColumns="False" CellSpacing="-1" > 
       <NoRecordsTemplate> 
        <div style="color: red"> 
         No Records to display! 
        </div> 
       </NoRecordsTemplate> 
       <Columns> 

        <telerik:GridTemplateColumn DataField="SSN" ReadOnly="True" HeaderText="SSN" UniqueName="SSN" 
         SortExpression="SSN"> 
         <ItemTemplate> 
          <asp:Label ID="LblSSN" runat="server" Text='<%#Eval("SSN") %>'></asp:Label> 
         </ItemTemplate> 
         <ItemStyle HorizontalAlign="Left" Width="5%" /> 
        </telerik:GridTemplateColumn> 

        <telerik:GridTemplateColumn DataField="Date" HeaderText="Date" UniqueName="Date" 
         SortExpression="Date"> 
         <ItemTemplate> 
          <asp:Label ID="LblDate" runat="server" Text='<%#Eval("Date","{0:MM/dd/yyyy}") %>'></asp:Label> 
         </ItemTemplate> 
         <ItemStyle HorizontalAlign="Left" Width="4%" /> 
        </telerik:GridTemplateColumn> 

       </Columns> 
      </MasterTableView> 
     </telerik:RadGrid> 

Antwort

0

Sie wie auf diese Weise tun:

protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e) 
{ 
    if (e.CommandName == RadGrid.FilterCommandName) 
    { 
     Pair filterPair = e.CommandArgument as Pair; 
     string columnName = Convert.ToString(filterPair.Second); 
     if (columnName == "CreationDate") 
     { 
      e.Canceled = true; 
      string date = ((TextBox)((GridFilteringItem)e.Item)[Convert.ToString(filterPair.Second)].Controls   [0]).Text; 
      DateTime startDate = Convert.ToDateTime(date); 
      DateTime endDate = startDate.AddDays(1); 
      string newFilter = "('" + startDate.ToString("MM/dd/yyyy") + "' <= [CreationDate] AND [CreationDate] <= '"   + endDate.ToString("MM/dd/yyyy") + "')"; 
      GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe(columnName); 
      dateColumn.CurrentFilterValue = startDate.ToString("MM/dd/yyyy"); 
      RadGrid1.MasterTableView.FilterExpression = newFilter; 
      RadGrid1.Rebind(); 
     } 
    } 
} 
0

Versuchen Sie, wie dieses

function FilterMenuShowing(sender, eventArgs) 
    {  
     if (eventArgs.get_column().get_uniqueName() == "IsPostable")  
     {    
      var menu = eventArgs.get_menu(); 
      var items = menu._itemData; 

      var i = 0; 

      while (i < items.length)  
      {  
       if (items[i].value != "NoFilter" && items[i].value != "EqualTo" && items[i].value != "NotEqualTo")  
       {  
        var item = menu._findItemByValue(items[i].value); 
        if (item != null) 
         item._element.style.display="none"; 
       }  
       i++;  
      } 
     } 
     else 
     { 
      var menu = eventArgs.get_menu(); 
      var items = menu._itemData; 

      var i = 0; 
      while (i < items.length)  
      {  
       var item = menu._findItemByValue(items[i].value); 
       if (item != null) 
        item._element.style.display=""; 
       i++;  
      } 
     }  

    } 

Auf dem Gitter Add-

<ClientSettings> 
    <ClientEvents OnFilterMenuShowing="filterMenuShowing" /> 
</ClientSettings> 

Details sehen here

0
You can try the way its done below for "order date" column. 

protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) 
{ 
    if (e.CommandName == RadGrid.FilterCommandName && 
    ((Pair)e.CommandArgument).Second.ToString() == "OrderDate" 
    && 
    ((Pair)e.CommandArgument).First != "NoFilter") 
    { 
     e.Canceled = true; 
     GridFilteringItem filterItem = (GridFilteringItem)e.Item; 
     string currentPattern = (filterItem[((Pair)e.CommandArgument).Second.ToString()].Controls[0] as TextBox).Text; 
     string filterPattern = ""; 
     string filterPatternAssist = ""; 
     if (currentPattern.IndexOf(" ") != -1) 
     { 
      currentPattern = currentPattern.Replace(" ", "/"); 
     } 
     string[] vals = currentPattern.Split("/".ToCharArray()); 
     string filterOption = (e.CommandArgument as Pair).First.ToString(); 
     if (filterOption != "IsNull" && filterOption != "NotIsNull") 
     { 
      if (vals.Length > 3) 
      { 
       filterPatternAssist = vals[4] + "/" + vals[3] + "/" + vals[5]; 
      } 
      filterPattern = vals[1] + "/" + vals[0] + "/" + vals[2]; 
     } 
     GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe("OrderDate"); 
     switch (filterOption) 
     { 
      case "EqualTo": 
       filterPattern = "[OrderDate] = '" + filterPattern + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.EqualTo; 
       break; 
      case "NotEqualTo": 
       filterPattern = "Not [OrderDate] = '" + filterPattern + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.NotEqualTo; 
       break; 
      case "GreaterThan": 
       filterPattern = "[OrderDate] > '" + filterPattern + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThan; 
       break; 
      case "LessThan": 
       filterPattern = "[OrderDate] < '" + filterPattern + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.LessThan; 
       break; 
      case "GreaterThanOrEqualTo": 
       filterPattern = "[OrderDate] >= '" + filterPattern + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThanOrEqualTo; 
       break; 
      case "LessThanOrEqualTo": 
       filterPattern = "[OrderDate] <= '" + filterPattern + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.LessThanOrEqualTo; 
       break; 
      case "Between": 
       filterPattern = "'" + filterPattern + "' <= [OrderDate] AND [OrderDate] <= '" + filterPatternAssist + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.Between; 
       break; 
      case "NotBetween": 
       filterPattern = "[OrderDate] <= '" + filterPattern + "' OR [OrderDate] >= '" + filterPatternAssist + "'"; 
       dateColumn.CurrentFilterFunction = GridKnownFunction.NotBetween; 
       break; 
      case "IsNull": 
       break; 
      case "NotIsNull": 
       break; 
     } 
     foreach (GridColumn column in RadGrid1.MasterTableView.Columns) 
     { 
      if (column.UniqueName != "OrderDate") 
      { 
       column.CurrentFilterFunction = GridKnownFunction.NoFilter; 
       column.CurrentFilterValue = string.Empty; 
      } 
     } 
     Session["filterPattern"] = filterPattern; 
     dateColumn.CurrentFilterValue = currentPattern; 
     filterItem.OwnerTableView.Rebind(); 
    } 
    //Add more conditional checks for commands here if necessary 
    else if (e.CommandName != RadGrid.SortCommandName && e.CommandName != RadGrid.PageCommandName) 
    { 
     Session["filterPattern"] = null; 
     GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe("OrderDate"); 
     dateColumn.CurrentFilterFunction = GridKnownFunction.NoFilter; 
     dateColumn.CurrentFilterValue = string.Empty; 
    } 
} 
Verwandte Themen