Laden...

SortableBindingList mit Filterfunktionalität bestücken

Erstellt von Bunnychecker vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.730 Views
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 12 Jahren
SortableBindingList mit Filterfunktionalität bestücken

Hi.

Ich habe zurzeit mein DGV mit einer SortableBindingList ausgestattet. Die normale BindingList lässt keine Sortierung im DGV zu.
Den Code hierfür habe ich im Netz gefunden:

public class SortableBindingList<T> :  BindingList<T>,IBindingListView
    {
        private bool _isSorted;

        protected override bool SupportsSortingCore
        {
            get { return true; }
        }

        protected override void ApplySortCore(PropertyDescriptor property, ListSortDirection direction)
        {

            // Get list to sort
            List<T> items = this.Items as List<T>;

            // Apply and set the sort, if items to sort
            if (items != null)
            {
                PropertyComparer<T> pc = new PropertyComparer<T>(property, direction);
                items.Sort(pc);
                _isSorted = true;
            }
            else
            {
                _isSorted = false;
            }

            // Let bound controls know they should refresh their views
            this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1));
        }

        protected override bool IsSortedCore
        {
            get { return _isSorted; }
        }

        protected override void RemoveSortCore()
        {
            _isSorted = false;
        }

Nun kann mein Nutzer bereits über das DGV die einzelnen Properties sortieren.

Nun möchte ich diese Liste gerne noch mit Filterfunktionalität ausstatten, damit nur noch bestimmte Objekte in meinem DGV angzeigt werden, wenn er eine Eingabe macht.

Kann mir jemand erklären, wie ich vorzugehen haben? Das Interface IBindingListView habe ich bereits eingebunden.

MfG

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo Bunnychecker,

wie hast du denn deine GUI architekturmäßig aufgebaut? Nach MVP, ö.ä.? Das wäre für sowas nämlich ratsam. Dadurch könntest du das Filtern und Sortieren aus der UI und der BindingsList komplett raushalten und im Presenter unterbringen. Dort gehört es mMn auch hin, da es über die "Standardsortierung" hinaus geht und Logik beinhaltet. Auch erreichst du so eine saubere Trennung der Anliegen und der Code wird testbar.

Ich gehe jetzt davon aus dass auch die BindingList von Winform mit einer ObservableCollection<T> umgehen kann und somit kann auf deren Items die Filt- und Sortierung vorgenommen werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 12 Jahren

Nein, leider keine MVP, handelt sich auch nur um ein kleines Projekt. Was schlägst du in diesem Fall vor?

1.029 Beiträge seit 2010
vor 12 Jahren

Hi,

IBindingListView ist ein guter Startpunkt.

Letztlich schreibt die Schnittstelle vor, dass wenn du
einen Filterstring entgegen nimmst du die items filtern
sollst -> einige Objekte aus der Collection (temporär) entfernst.

Das schwierige ist hauptsächlich das Parsen des Filterstrings in
anwendbare Filterbedingungen. Ich arbeite derzeit an sowas - je nachdem
was du alles unterstützen möchtest wird das alles andere als trivial... 😉

Fertige Implementierungen dafür gibt's im Web soweit ich weiß garnicht.

Das Beste was ich dazu kenne ist die BindingListView,
welche Filterung per Delegaten erlaubt.

Bitte immer beachten: Das erlaubt dann zwar alles Filtern - der DGV hat dennoch keine eingebaute Oberfläche zum Filtern...

Kann nur viel Spaß wünschen 😉

Ich werde mich jedenfalls melden, wenn meine Komponente fertig ist -
wird aber nicht in 1-2 Wochen sein 😛

LG
Achim