Tryb sortowania kolumn w formancie DataGridView formularzy systemu Windows

DataGridView kolumny mają trzy tryby sortowania. Tryb sortowania dla każdej kolumny jest określany za pomocą SortMode właściwości kolumny, którą można ustawić na jedną z następujących DataGridViewColumnSortMode wartości wyliczenia.

DataGridViewColumnSortMode Wartość opis
Automatic Wartość domyślna dla kolumn pól tekstowych. Jeśli nagłówki kolumn nie są używane do zaznaczenia, kliknięcie nagłówka kolumny automatycznie sortuje DataGridView według tej kolumny i wyświetla glif wskazujący kolejność sortowania.
NotSortable Wartość domyślna dla kolumn innych niż pola tekstowe. Tę kolumnę można sortować programowo; jednak nie jest przeznaczony do sortowania, więc nie ma miejsca zarezerwowanego dla glif sortowania.
Programmatic Tę kolumnę można sortować programowo, a miejsce jest zarezerwowane dla sortowania glifów.

Możesz zmienić tryb sortowania kolumny domyślnej NotSortable , jeśli zawiera wartości, które mogą być znacząco uporządkowane. Jeśli na przykład masz kolumnę bazy danych zawierającą liczby reprezentujące stany elementów, możesz wyświetlić te liczby jako odpowiednie ikony, łącząc kolumnę obrazu z kolumną bazy danych. Następnie można zmienić wartości komórek liczbowych na wartości wyświetlane na obrazie w procedurze obsługi zdarzenia DataGridView.CellFormatting . W takim przypadku ustawienie SortMode właściwości na wartość Automatic spowoduje, że użytkownicy będą mogli sortować kolumnę. Automatyczne sortowanie umożliwi użytkownikom grupowanie elementów, które mają ten sam stan, nawet jeśli stany odpowiadające liczbom nie mają sekwencji naturalnej. Kolumny pól wyboru to kolejny przykład, w którym automatyczne sortowanie jest przydatne w przypadku grupowania elementów w tym samym stanie.

Można sortować DataGridView programowo według wartości w dowolnej kolumnie lub w wielu kolumnach, niezależnie od SortMode ustawień. Sortowanie programowe jest przydatne, gdy chcesz udostępnić własny interfejs użytkownika do sortowania lub gdy chcesz zaimplementować sortowanie niestandardowe. Udostępnianie własnego interfejsu użytkownika sortowania jest przydatne, na przykład po ustawieniu DataGridView trybu wyboru w celu włączenia zaznaczenia nagłówka kolumny. W takim przypadku, chociaż nagłówki kolumn nie mogą być używane do sortowania, nadal chcesz, aby nagłówki wyświetlały odpowiedni glyph sortowania, więc należy ustawić SortMode właściwość na Programmatic.

Kolumny ustawione na tryb sortowania programowego nie wyświetlają automatycznie glyph sortowania. W przypadku tych kolumn należy samodzielnie wyświetlić glif, ustawiając DataGridViewColumnHeaderCell.SortGlyphDirection właściwość . Jest to konieczne, jeśli chcesz mieć elastyczność sortowania niestandardowego. Jeśli na przykład posortujesz DataGridView według wielu kolumn, możesz wyświetlić wiele glyphs sortowania lub brak sortowania glyph.

Chociaż można programowo sortować DataGridView według dowolnej kolumny, niektóre kolumny, takie jak kolumny przycisków, mogą nie zawierać wartości, które mogą być znacząco uporządkowane. W przypadku tych kolumn ustawienie NotSortable właściwości wskazuje, SortMode że nigdy nie będzie używane do sortowania, więc nie ma potrzeby zarezerwowania miejsca w nagłówku dla glif sortowania.

DataGridView Po posortowaniu elementu można określić zarówno kolumnę sortowania, jak i kolejność sortowania, sprawdzając wartości SortedColumn właściwości i SortOrder . Te wartości nie są istotne po operacji sortowania niestandardowego. Aby uzyskać więcej informacji na temat sortowania niestandardowego, zobacz sekcję Sortowanie niestandardowe w dalszej części tego tematu.

Gdy kontrolka DataGridView zawierająca zarówno powiązane, jak i niepowiązane kolumny jest sortowana, wartości w niezwiązanych kolumnach nie mogą być zachowywane automatycznie. Aby zachować te wartości, należy zaimplementować tryb wirtualny, ustawiając VirtualMode właściwość na true i obsługując zdarzenia CellValueNeeded i CellValuePushed . Aby uzyskać więcej informacji, zobacz How to: Implement Virtual Mode in the Windows Forms DataGridView Control (Instrukcje: implementowanie trybu wirtualnego w kontrolce DataGridView formularzy systemu Windows). Sortowanie według niezwiązanych kolumn w trybie powiązanym nie jest obsługiwane.

Sortowanie programowe

Można sortować DataGridView programowo, wywołując jego Sort metodę.

Przeciążenie Sort(DataGridViewColumn,ListSortDirection)Sort metody przyjmuje DataGridViewColumn wartość wyliczenia i ListSortDirection jako parametry. To przeciążenie jest przydatne podczas sortowania według kolumn z wartościami, które mogą być znacząco uporządkowane, ale które nie chcesz konfigurować do automatycznego sortowania. Gdy wywołasz to przeciążenie i przekażesz kolumnę z wartością SortModeDataGridViewColumnSortMode.Automaticwłaściwości , SortedColumn właściwości i SortOrder zostaną ustawione automatycznie, a odpowiedni glyph sortowania pojawi się w nagłówku kolumny.

Uwaga

Gdy kontrolka DataGridView jest powiązana z zewnętrznym źródłem danych przez ustawienie DataSource właściwości, Sort(DataGridViewColumn,ListSortDirection) przeciążenie metody nie działa w przypadku kolumn niepowiązanych. Ponadto, gdy VirtualMode właściwość ma truewartość , można wywołać to przeciążenie tylko dla powiązanych kolumn. Aby określić, czy kolumna jest powiązana z danymi, sprawdź IsDataBound wartość właściwości. Sortowanie niezwiązanych kolumn w trybie powiązanym nie jest obsługiwane.

Sortowanie niestandardowe

Można dostosować DataGridView za pomocą Sort(IComparer) przeciążenia Sort metody lub przez obsługę SortCompare zdarzenia.

Przeciążenie Sort(IComparer) metody przyjmuje wystąpienie klasy, która implementuje IComparer interfejs jako parametr. To przeciążenie jest przydatne, gdy chcesz podać sortowanie niestandardowe; na przykład gdy wartości w kolumnie nie mają naturalnej kolejności sortowania lub gdy naturalna kolejność sortowania jest nieodpowiednia. W takim przypadku nie można użyć automatycznego sortowania, ale nadal możesz chcieć sortować użytkowników, klikając nagłówki kolumn. To przeciążenie można wywołać w procedurze obsługi dla ColumnHeaderMouseClick zdarzenia, jeśli nie używasz nagłówków kolumn do wyboru.

Uwaga

Przeciążenie Sort(IComparer) metody działa tylko wtedy, gdy kontrolka DataGridView nie jest powiązana z zewnętrznym źródłem danych, a VirtualMode wartość właściwości to false. Aby dostosować sortowanie kolumn powiązanych z zewnętrznym źródłem danych, należy użyć operacji sortowania dostarczonych przez źródło danych. W trybie wirtualnym należy podać własne operacje sortowania dla kolumn niepowiązanych.

Aby użyć Sort(IComparer) przeciążenia metody, należy utworzyć własną klasę, która implementuje IComparer interfejs. Ten interfejs wymaga, aby klasa zaimplementowała metodę IComparer.Compare , do której DataGridView obiekty są przesyłane DataGridViewRow jako dane wejściowe, gdy Sort(IComparer) wywoływane jest przeciążenie metody. Dzięki temu można obliczyć prawidłowe kolejność wierszy na podstawie wartości w dowolnej kolumnie.

Przeciążenie Sort(IComparer) metody nie ustawia SortedColumn właściwości i SortOrder , dlatego należy zawsze ustawić DataGridViewColumnHeaderCell.SortGlyphDirection właściwość , aby wyświetlić glyph sortowania.

Alternatywą dla przeciążenia metody jest zapewnienie sortowania niestandardowego Sort(IComparer) przez zaimplementowanie procedury obsługi dla SortCompare zdarzenia. To zdarzenie występuje, gdy użytkownicy klikają nagłówki kolumn skonfigurowanych do automatycznego sortowania lub podczas wywoływania Sort(DataGridViewColumn,ListSortDirection) przeciążenia Sort metody. Zdarzenie występuje dla każdej pary wierszy w kontrolce, co umożliwia obliczenie ich prawidłowej kolejności.

Uwaga

Zdarzenie SortCompare nie występuje, gdy DataSource właściwość jest ustawiona lub gdy VirtualMode wartość właściwości to true.

Zobacz też