2010-07-13 2 views
1

J'ai un répéteur J'ai lié à des noms de colonne qui sont filtrés, comme ils sont appliqués (en utilisant des sessions actuellement, je pourrais changer cela pour parcourir les colonnes à la recherche de filtres maintenant que je sais vraiment comment la grille fonctionne).Suppression par programmation d'un filtre de menu contextuel d'en-tête de RadGrid

J'ai un bouton à côté de chaque nom de colonne filtrée qui doit supprimer le filtre de la RadGrid.

 <asp:Repeater ID="repCorpFilters" runat="server" OnItemCommand="repFilters_ItemCommand"> 
      <HeaderTemplate> 
       Current Filters: 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:ImageButton runat="server" CommandName="removefilter" CommandArgument="corp" ImageUrl="../images/Delete.gif" /> 
       <asp:literal ID="litFilter" runat="server" Text='<%#Container.DataItem() %>' /> 
      </ItemTemplate> 
      <SeparatorTemplate> 
       , 
      </SeparatorTemplate> 
     </asp:Repeater> 


Protected Sub repFilters_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) 
    Select Case e.CommandName 
     Case "removefilter" 
      BindGrid(DirectCast([Enum].Parse(GetType(products), e.CommandArgument), products), Nothing, _ 
        CType(e.Item.FindControl("litFilter"), Literal).Text) 
    End Select 
End Sub 


Private Sub BindGrid(ByVal prod As products, Optional ByVal cusipFilter As String = Nothing, Optional ByVal strRemoveFilter As String = Nothing) 
    Dim dvCorp As DataView = CachedPartialCorp() 
    If Not IsNothing(cusipFilter) Then 
     isCusipFiltered = True 
     dvCorp.RowFilter = "CUSIP IN " & cusipFilter 
    End If 

    If Not IsNothing(strRemoveFilter) Then 
     Dim filters As List(Of String) = RemoveFilter("partialCorpFilters", strRemoveFilter) 

     If filters.Count = 0 Then 
      repCorpFilters.Visible = False 
     Else 
      repCorpFilters.DataSource = filters 
      repCorpFilters.DataBind() 
     End If 

     For Each gc As GridColumn In dtgCorp.MasterTableView.Columns 
      With gc 
       If .IsBoundToFieldName(strRemoveFilter) Then 
        .CurrentFilterFunction = GridKnownFunction.NoFilter 
        .CurrentFilterValue = "" 
        .AndCurrentFilterFunction = GridKnownFunction.NoFilter 
        .AndCurrentFilterValue = "" 
       End If 
      End With 
     Next 
    End If 

    dtgCorp.DataSource = dvCorp 
    dtgCorp.DataBind() 
End Sub 

Tout fonctionne correctement, sauf le retrait du filtre du RadGrid. Où je fais une boucle dans les colonnes et trouve la colonne correcte avec le filtre que j'essaie de supprimer, je réinitialise les listes déroulantes et les valeurs du filtre, cela fonctionne très bien! Je peux cliquer avec le bouton droit sur l'élément d'en-tête et le filtre ne s'affiche pas. Mais les données restent filtrées! Comment puis-je dire à RadGrid de réévaluer sa nouvelle valeur de filtre en fonction des filtres sélectionnés?

Le bit juteux du code que je ressens est ici:

 For Each gc As GridColumn In dtgCorp.MasterTableView.Columns 
      With gc 
       If .IsBoundToFieldName(strRemoveFilter) Then 
        .CurrentFilterFunction = GridKnownFunction.NoFilter 
        .CurrentFilterValue = "" 
        .AndCurrentFilterFunction = GridKnownFunction.NoFilter 
        .AndCurrentFilterValue = "" 
       End If 
      End With 
     Next 
    End If 

    dtgCorp.DataSource = dvCorp 
    dtgCorp.DataBind() 

Répondre

2
 For Each gc As GridColumn In dtg.MasterTableView.Columns 
      With gc 
       If .IsBoundToFieldName(strRemoveFilter) Then 
        dtg.MasterTableView.GetItems(GridItemType.FilteringItem)(0).FireCommandEvent(RadGrid.HeaderContextMenuFilterCommandName, _ 
         New Triplet(strRemoveFilter, New Pair("NoFilter", ""), New Pair("NoFilter", ""))) 
       End If 
      End With 
     Next 

Ceci est le code qui finalement fait :)

1

Avez-vous essayé d'utiliser NeedDataSource obligatoire pour la grille au lieu de se lier à des appels DataBind()? Appelez simplement la méthode Rebind() de la grille dans ce cas pour effacer les valeurs du filtre. Voir aussi comment les filtres sont effacés sur this demo.

Dick

+0

J'ai essayé la méthode retirage(), et sans résultat: exactement les mêmes résultats. En ce qui concerne la démo, ils effacent toute l'expression de filtre de TableView avec "RadGrid1.MasterTableView.FilterExpression = String.Empty". Ce qui fonctionne très bien si vous effacez totalement les filtres, mais j'en ai besoin pour évaluer une nouvelle FilterExpression basée sur les filtres actuellement choisis, après avoir supprimé le filtre sélectionné. –

+0

Je crains de ne pas pouvoir vous aider, vous pouvez contacter Telerik sur les forums de leur site. –

+0

L'a fait aussi :) Les grands esprits se ressemblent! –

Questions connexes