W FastReport obiekt Matrix pozwala nam na filtrowanie danych. Jest to jedna z najbardziej popularnych funkcjonalności i wielu użytkowników chętnie z niej korzysta. Czasami jednak filtrowanie oryginalnych danych nie wchodzi w grę.
Spójrzmy na poniższą matrycę.
Jak widać, są to statystyki sprzedaży według pracowników za 5 lat. Nie ma statystyk dla pracownika Steven Buchanan dla lat 2011, 2012 i 2015. Oznacza to, że Steven zniknie z macierzy jeśli przefiltrujemy macierz przez rok i odliczymy 2013 i 2014.
Aby uzyskać pełny obraz, należy policzyć wszystkich pracowników, nawet jeśli nie prowadzili sprzedaży w okresiesprawozdawczym. W tym przypadku będziesz musiał skorzystać z jednej z poniższych opcji:
1) sztuczne uzupełnienie pierwotnych danych o wartości zerowe dla każdego roku, w którym pracownik nie miał sprzedaży;
2) przefiltrowanie już zbudowanej macierzy poprzez usunięcie zbędnych kolumn.
W szablonie raportu:
Dodajmy teraz do tabeli zdarzenie BeforePrint dla komórki Year:
Z następującym kodem:
Tutaj ustawiliśmy indeksy kolumn, które chcemy usunąć. Teraz stworzymy obsługę zdarzenia ModifyResult dla macierzy, aby edytować już zbudowany obiekt "matrix":
private void Matrix1_ModifyResult(object sender, EventArgs e) { removeColumns.Reverse(); foreach (int del in removeColumns) { Matrix1.ResultTable.Columns.RemoveAt(del); } }
Należy kasować od końca - od największego indeksu, ponieważ podczas kasowania kolumn lub wierszy, indeks wszystkich następnych jest przesuwany. Dlatego lista indeksów do usunięcia została zbudowana w odwrotnej kolejności za pomocą metody Reverse (). Następnie po prostu usunęliśmy kolumny dla odpowiadających im indeksów. Zobaczmy, co mamy na końcu:
Z matrycy zniknęły kolumny za lata 2013 i 2014, ale pracownik Steven Buchanan pozostał. Uzyskaliśmy pożądany efekt! Możesz również usunąć niepotrzebne wiersze za pomocą innej kolekcji Matrix1.ResultTable.Rows. Teraz już wiesz, jak filtrować macierz, gdy filtrowanie danych nie jest opcją.