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()
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é. –
Je crains de ne pas pouvoir vous aider, vous pouvez contacter Telerik sur les forums de leur site. –
L'a fait aussi :) Les grands esprits se ressemblent! –