Od czasu do czasu nasi użytkownicy stają przed zadaniem wykonania interaktywnego raportu. Może to być raport, w którym kolejność sortowania danych może być zmieniana po wykonaniu zapytania. Dziś zajmiemy się procesem tworzenia takiego raportu.
Załóżmy, że mamy gotowy plik z skonfigurowanym sortowaniem. Jako przykład posłuży nam raport Simple List z aplikacji demonstracyjnej FastReport .NET.
Raport ma skonfigurowane sortowanie:
Najpierw zespoły są sortowane według imion, a następnie według nazwisk. Sortowanie odbywa się w kolejności rosnącej, czyli od A do Я w przypadku czcionki pisanej cyrylicą, lub od A do Z w przypadku czcionki pisanej czcionką rzymską.
Teraz dodamy interaktywność do naszego raportu. Zaznaczamy obiekt tekstowy - np. tytuł i dodajemy obsługę zdarzenia Click. Dzięki temu, po kliknięciu na obiekt, w podglądzie pojawi się funkcja, którą będziemy konfigurować.
Ponadto zmieniamy właściwość Cursor na Hand, tak aby kursor zmieniał się w dłoń, gdy wskażemy na obiekt. W ten sposób staje się oczywiste, że obiekt jest klikalny.
Zobaczmy jak działa sortowanie w FastReport, abyśmy mogli napisać kod funkcji.
Sortowanie danych jest przechowywane jako kolekcja wartości. Istnieje kilka opcji implementacji zmiany sortowania, ale wszystkie one sprowadzają się do modyfikacji tej kolekcji.
Jeśli spojrzymy na sortowanie w kodzie, zobaczymy listę metod i właściwości. My będziemy pracować z właściwościami Descending i Expression.
Właściwość Expression pokrywa się z polem "Sort by..." w konstruktorze, natomiast właściwość Descending pokrywa się z przełącznikiem "ascending/descending order". Należy pamiętać, że z poziomu projektanta można skonfigurować tylko trzy reguły sortowania, natomiast z poziomu kodu można dodać ich nieograniczoną ilość. W związku z tym, projektant nie obsługuje więcej niż trzech reguł. Podczas otwierania właściwości zespołu z czterema zapisanymi regułami, zostaną wyświetlone pierwsze trzy z nich i tylko one zostaną zapisane po zmianie.
Kolejność reguł sortowania rozpoczyna się od reguły o indeksie 0, następnie stosowana jest reguła o indeksie 1, itd.
W naszym przypadku, kolekcja Sort posiada dwie wartości:
1) Expression = [Employees.FirstName], Descending = false
2) Expression = [Employees.LastName], Descending = false
Teraz przystępujemy do pisania kodu.
Dodajemy zmienną "sorting", która będzie ustawiała kolejność sortowania:
bool sorting = false;
Aby zmienić kolejność sortowania, należy zmienić właściwość Descending. Zmienimy ją dla zerowego elementu kolekcji Sort, a następnie sortowanie zostanie odwrócone i raport zostanie zaktualizowany:
private void Text1_Click(object sender, EventArgs e) { Data1.Sort[0].Descending = sorting; sorting = !sorting; Report.Refresh(); }
Jeśli uruchomimy raport i klikniemy na tytuł - "PRACOWNICY" - zobaczymy co następuje:
Jak widać, sortowanie zostało odwrócone, ostatnie rekordy znajdują się teraz na pierwszych pozycjach. Warto zauważyć, że kolekcję Sort można nie tylko modyfikować, ale także dodawać lub usuwać jej elementy. Na przykład zmiana sortowania może być wykonana w inny sposób:
W tym kodzie wyczyścimy kolekcję i dodamy do niej dwie nowe reguły sortowania, z których jedna posiada zmienną właściwość.
W ten sposób sprawdziliśmy, jak można zmienić sortowanie z poziomu skryptu. Oprócz zmiany sortowania za pomocą kliknięcia, możesz użyć powyższych funkcji w połączeniu z innymi. Na przykład możesz zmienić sortowanie pasma klikając przycisk w zakładce dialogowej, tworząc interaktywną listę pól źródła danych lub zmienić sortowanie w zależności od dowolnej innej wartości.