Režimy třídění sloupce v ovládacím prvku Windows Forms DataGridView

DataGridView sloupce mají tři režimy řazení. Režim řazení pro každý sloupec je určen vlastností SortMode sloupce, který lze nastavit na jednu z následujících DataGridViewColumnSortMode hodnot výčtu.

DataGridViewColumnSortMode Hodnotu Popis
Automatic Výchozí hodnota pro sloupce textového pole Pokud nejsou záhlaví sloupců použita pro výběr, kliknutím na záhlaví sloupce automaticky seřadíte DataGridView podle tohoto sloupce a zobrazí se glyf označující pořadí řazení.
NotSortable Výchozí hodnota pro sloupce bez textového pole Tento sloupec můžete seřadit programově; není však určen pro řazení, takže pro řazení glyfů není vyhrazeno žádné místo.
Programmatic Tento sloupec můžete seřadit programově a místo je vyhrazené pro řazení glyfů.

Můžete chtít změnit režim řazení sloupce, který ve výchozím nastavení NotSortable obsahuje hodnoty, které lze smysluplně uspořádat. Pokud máte například sloupec databáze obsahující čísla představující stavy položek, můžete tato čísla zobrazit jako odpovídající ikony vazbou sloupce obrázku na sloupec databáze. Potom můžete změnit číselné hodnoty buněk na obrázky, které zobrazují hodnoty v obslužné rutině DataGridView.CellFormatting události. V takovém případě nastavíte SortMode vlastnost tak, aby Automatic uživatelé mohli sloupec seřadit. Automatické řazení umožní uživatelům seskupit položky se stejným stavem, i když stavy odpovídající číslům nemají přirozenou sekvenci. Sloupce zaškrtávacích políček jsou dalším příkladem, kdy je automatické řazení užitečné pro seskupení položek ve stejném stavu.

Hodnoty v libovolném DataGridView sloupci nebo ve více sloupcích můžete řadit programově bez SortMode ohledu na nastavení. Programové řazení je užitečné, když chcete k řazení nebo implementaci vlastního řazení zadat vlastní uživatelské rozhraní. Poskytnutí vlastního uživatelského rozhraní pro řazení je užitečné, například když nastavíte DataGridView režim výběru pro povolení výběru záhlaví sloupce. V tomto případě sice záhlaví sloupců nelze použít k řazení, ale přesto chcete, aby záhlaví zobrazovala odpovídající glyfy řazení, takže byste vlastnost nastavili SortMode na Programmatic.

Sloupce nastavené na programový režim řazení nezobrazují automaticky řazení glyfů. U těchto sloupců je nutné zobrazit glyf sami nastavením DataGridViewColumnHeaderCell.SortGlyphDirection vlastnosti. To je nezbytné, pokud chcete mít flexibilitu při vlastním řazení. Pokud například seřadíte DataGridView podle více sloupců, můžete chtít zobrazit více glyfů nebo žádné řazení glyfů.

I když můžete řadit podle libovolného DataGridView sloupce prostřednictvím kódu programu, některé sloupce, například sloupce spouštěné tlačítkem, nemusí obsahovat hodnoty, které se dají smysluplně uspořádat. U těchto sloupců nastavení vlastnosti NotSortable označuje, SortMode že se nikdy nepoužije k řazení, takže není nutné rezervovat místo v záhlaví pro glyf.

DataGridView Při řazení můžete určit sloupec řazení i pořadí řazení tak, že zkontrolujete hodnoty hodnot SortedColumn a SortOrder vlastností. Tyto hodnoty nejsou smysluplné po vlastní operaci řazení. Další informace o vlastním řazení najdete v části Vlastní řazení dále v tomto tématu.

DataGridView Pokud je ovládací prvek obsahující vázané i nevázané sloupce seřazený, nelze hodnoty v nevázaných sloupcích udržovat automaticky. Chcete-li tyto hodnoty zachovat, je nutné implementovat virtuální režim nastavením VirtualMode vlastnosti na true a zpracování CellValueNeeded událostí a CellValuePushed událostí. Další informace naleznete v tématu Postupy: Implementace virtuálního režimu v ovládacím prvku model Windows Forms DataGridView. Řazení podle nevázaných sloupců v režimu vazby se nepodporuje.

Programové řazení

Můžete řadit DataGridView programově voláním jeho Sort metody.

Přetížení Sort(DataGridViewColumn,ListSortDirection)Sort metody přebírá DataGridViewColumn hodnotu výčtu ListSortDirection jako parametry. Toto přetížení je užitečné při řazení podle sloupců s hodnotami, které lze smysluplně uspořádat, ale které nechcete konfigurovat pro automatické řazení. Při volání tohoto přetížení a předání sloupce s SortMode hodnotou DataGridViewColumnSortMode.Automaticvlastnosti , SortedColumn a SortOrder vlastnosti jsou nastaveny automaticky a odpovídající řazení glyph se zobrazí v záhlaví sloupce.

Poznámka:

DataGridView Pokud je ovládací prvek vázán na externí zdroj dat nastavením DataSource vlastnosti, Sort(DataGridViewColumn,ListSortDirection) přetížení metody nefunguje pro nevázané sloupce. Kromě toho, pokud VirtualMode je truevlastnost , můžete volat toto přetížení pouze pro vázané sloupce. Pokud chcete zjistit, jestli je sloupec svázaný s daty, zkontrolujte IsDataBound hodnotu vlastnosti. Řazení nevázaných sloupců v vázaném režimu není podporováno.

Vlastní řazení

Přizpůsobení můžete provést DataGridView pomocí Sort(IComparer) přetížení Sort metody nebo zpracování SortCompare události.

Přetížení Sort(IComparer) metody přebírá instanci třídy, která implementuje IComparer rozhraní jako parametr. Toto přetížení je užitečné, pokud chcete poskytnout vlastní řazení; Pokud například hodnoty ve sloupci nemají přirozené pořadí řazení nebo když je přirozené pořadí řazení nevhodné. V takovém případě nemůžete použít automatické řazení, ale přesto můžete chtít, aby uživatelé mohli řadit kliknutím na záhlaví sloupců. Toto přetížení můžete volat v obslužné rutině ColumnHeaderMouseClick události, pokud pro výběr nepoužíváte záhlaví sloupců.

Poznámka:

Přetížení Sort(IComparer) metody funguje pouze v případech, DataGridView kdy ovládací prvek není vázán na externí zdroj dat a VirtualMode hodnota vlastnosti je false. Chcete-li přizpůsobit řazení sloupců vázaných na externí zdroj dat, musíte použít operace řazení poskytované zdrojem dat. Ve virtuálním režimu musíte zadat vlastní operace řazení pro nevázané sloupce.

Chcete-li použít Sort(IComparer) přetížení metody, musíte vytvořit vlastní třídu, která implementuje IComparer rozhraní. Toto rozhraní vyžaduje, aby vaše třída implementovat metodu IComparer.Compare , do které DataGridView předává DataGridViewRow objekty jako vstup při Sort(IComparer) zavolání přetížení metody. Pomocí toho můžete vypočítat správné pořadí řádků na základě hodnot v libovolném sloupci.

Přetížení Sort(IComparer) metody nenastavuje SortedColumn a SortOrder vlastnosti, takže musíte vždy nastavit DataGridViewColumnHeaderCell.SortGlyphDirection vlastnost pro zobrazení glyph řazení.

Jako alternativu Sort(IComparer) k přetížení metody můžete poskytnout vlastní řazení implementací obslužné rutiny SortCompare události. K této události dochází, když uživatelé kliknou na záhlaví sloupců nakonfigurovaných pro automatické řazení nebo při volání Sort(DataGridViewColumn,ListSortDirection) přetížení Sort metody. K události dochází pro každou dvojici řádků v ovládacím prvku, což vám umožní vypočítat jejich správné pořadí.

Poznámka:

Událost SortCompare nenastane, pokud DataSource je vlastnost nastavena nebo když VirtualMode je truehodnota vlastnosti .

Viz také