2010-12-03 4 views
5

J'utilise la grille telerik. Je dois appliquer un filtre pour toutes les colonnes de ma grille. Actuellement, je personnalise l'option de filtre en utilisant le code suivant. En utilisant le code suivant, je supprime certains éléments pour toutes les colonnes. Mais, pour une colonne de date, quelqu'un pourrait-il me dire quelles sont les options possibles pour le filtrage dans la grille et comment personnaliser ces options de filtrage?Personnalisez l'option de filtre pour une date colmn telerik grid

code Derrière

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> 

Répondre

0

vous aimez cette façon:

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

Essayez comme ça

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++;  
      } 
     }  

    } 

Sur votre grille Add-

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

Voir détails 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; 
    } 
} 
Questions connexes