FAQ ASP.NET/VB.NET
FAQ ASP.NET/VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 16 juin 2021
Il peut arriver qu'on ait besoin de faire un filtre sur une datasource de repeater mais qu'on ne puisse pas toujours filtrer cette source en amont. Dans ce cas, on peut très bien faire notre filtre au moment où le repeater se construit.
Soit un repeater tout bete :
<
asp:Repeater runat=
"server"
ID=
"MonRepeater"
OnItemDataBound=
"ItemDataBound"
>
<
ItemTemplate>
<
asp:Label runat=
"server"
Text
=
"<%#Container.DataItem %>"
/>
</
ItemTemplate>
</
asp:Repeater>
MonRepeater.DataSource
=
New
Integer
(
) {1
, 2
, 3
, 4
, 5
, 6
, 7
}
MonRepeater.DataBind
(
)
Il suffit d'agir sur le ItemDataBound et de masquer l'élément.
Ici par exemple, je n'affiche que les nombres impairs :
Protected
Sub
ItemDataBound
(
ByVal
sender As
Object
, ByVal
e As
RepeaterItemEventArgs)
If
e.Item.DataItem
Mod
2
=
0
Then
e.Item.Visible
=
False
End
If
End
Sub
Une autre solution est d'intervenir au moment du databinding
<
asp:Repeater runat=
"server"
ID=
"MonRepeater"
OnDataBinding=
"DataBindingRepeater"
>
Protected
Sub
DataBindingRepeater
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
Dim
r As
Repeater =
sender
r.DataSource
=
Array
.FindAll
(
Of
Integer
)(
r.DataSource
, AddressOf
filtre)
End
Sub
Public
Function
filtre
(
ByVal
i As
Integer
) As
Boolean
Return
i Mod
2
<>
0
End
Function