Hi
habe letztens für ein kleines Programm eine Klasse geschrieben, die eine IBindingList filtert. Leider ist der Code mehr als 19000 Zeichen lang, daher habe ich ihn als Anhang hochgeladen.
Die Klasse filtert die im Konstruktor angegebene Liste auf Basis des Typs T und des übergebenen Prädikats, sofern dieses gesetzt ist. Sofern nicht auf den Typ gefiltert werden soll, kann man ihn einfach auf Object setzen. Der Code ist leider nicht dokumentiert, aber das meiste sollte selbsterklärend sein. Sofern Fragen - auch zum Code - bestehen beantworte ich die natürlich gerne. Die Indexermittlung ist unperformant, das hab' ich aber im Code auch noch mal angemerkt.
Hier noch ein kleines Beispiel, bei dem eine Liste von Strings gefiltert wird. Ich implementiere demnächst noch eine Version, bei der stattdessen der DisplayMember genommen wird:
Ich hoffe, ich habe keine Bugs reinprogrammiert und es hilft dem einen oder anderen. Viel Spaß.
Gruß
~blaze~
habe letztens für ein kleines Programm eine Klasse geschrieben, die eine IBindingList filtert. Leider ist der Code mehr als 19000 Zeichen lang, daher habe ich ihn als Anhang hochgeladen.
Die Klasse filtert die im Konstruktor angegebene Liste auf Basis des Typs T und des übergebenen Prädikats, sofern dieses gesetzt ist. Sofern nicht auf den Typ gefiltert werden soll, kann man ihn einfach auf Object setzen. Der Code ist leider nicht dokumentiert, aber das meiste sollte selbsterklärend sein. Sofern Fragen - auch zum Code - bestehen beantworte ich die natürlich gerne. Die Indexermittlung ist unperformant, das hab' ich aber im Code auch noch mal angemerkt.
Hier noch ein kleines Beispiel, bei dem eine Liste von Strings gefiltert wird. Ich implementiere demnächst noch eine Version, bei der stattdessen der DisplayMember genommen wird:
VB.NET-Quellcode
- Private _filteredList As BindingListFilter(Of String)
- Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim bf As New BindingList(Of String)() 'die darunterliegende Liste der Strings
- _filteredList = New BindingListFilter(Of String)(bf, Function(a) a.Contains(TextBox.Text)) '1. Parameter ist die darunterliegende Liste, 2. ist das Praedikat. Wenn das Praedikat Nothing ist oder weggelassen wird, wird es einfach ignoriert
- ListBox.DataSource = _filteredList 'Die Datenquelle der ListBox auf die gefilterte Liste setzen
- End Sub
- Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox.TextChanged
- _filteredList.Update() 'die Liste updaten, da sich das Praedikat geaendert hat
- End Sub
Ich hoffe, ich habe keine Bugs reinprogrammiert und es hilft dem einen oder anderen. Viel Spaß.
Gruß
~blaze~
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()