DataGridView實(shí)現(xiàn)點(diǎn)擊列頭升序和降序排序
DataGridView 列有三種排序模式。每一列的排序模式是通過該列的 SortMode 屬性指定的,該屬性可以設(shè)置為以下的 DataGridViewColumnSortMode 枚舉值之一。
DataGridViewColumnSortMode 值說明:
- Automatic
文本框列的默認(rèn)排序模式。除非將列標(biāo)頭用于選擇,否則單擊列標(biāo)頭將自動按此列對 DataGridView 排序,并顯示一個(gè)指示排序順序的標(biāo)志符號(向上的三角箭頭:升序排序;向下的三角箭頭:降序排序)。 - NotSortable
非文本框列的默認(rèn)排序模式??梢砸跃幊谭绞綄Υ肆信判颍坏肆胁贿m合排序,因此未為排序標(biāo)志符號保留空間。 - Programmatic
可以以編程方式對此列排序;而且為排序標(biāo)志符號保留了空間。
一、使用SortMode屬性自動排序
1、通過程序設(shè)置
private void FrmMain_Load(object sender, EventArgs e)
{
foreach (DataGridViewColumn column in this.dgv_Users.Columns)
{
//設(shè)置自動排序
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
}2、在設(shè)計(jì)界面修改屬性

二、使用編程的方式實(shí)現(xiàn)自定義排序
可以以編程方式按任一列或多列中的值對 DataGridView 排序,而不論 SortMode 設(shè)置如何。當(dāng)希望為排序提供自己的用戶界面 (UI) 時(shí),或者當(dāng)希望實(shí)現(xiàn)自定義排序時(shí),以編程方式排序很有用。提供自己的排序用戶界面非常有用,例如,在設(shè)置 DataGridView 選擇模 式以啟用列標(biāo)頭選擇時(shí)。在這種情況下,雖然列標(biāo)頭不能用于排序,但是仍希望標(biāo)頭顯示相應(yīng)的排序標(biāo)志符號,因此將 SortMode 屬性設(shè)置為 Programmatic。
設(shè)置為編程排序模式的列不會自動顯示排序標(biāo)志符號。對于這些列,必須通過設(shè)置 System.Windows.Forms.DataGridViewColumnHeaderCell.SortGlyphDirection 屬性 來手動顯示標(biāo)志符號。為了在自定義排序中能夠靈活操作,這是必需的。例如,如果按多列對 DataGridView 排序,則可能希望顯示多個(gè)排序標(biāo)志符 號或不顯示任何標(biāo)志符號。
對于已排序的 DataGridView,可以通過檢查 SortedColumn 和 SortOrder 屬性的值確定排序列和排序順序。
如果SortMode的屬性設(shè)置為Programmatic就需要使用編程的方式在ColumnHeaderMouseClick事件中實(shí)現(xiàn)自定義排序。
示例:
private void dgv_Users_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
{
string columnBindingName = dgv.Columns[e.ColumnIndex].DataPropertyName;
switch (dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection)
{
case System.Windows.Forms.SortOrder.None:
case System.Windows.Forms.SortOrder.Ascending:
CustomSort(columnBindingName, "desc");
dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
break;
case System.Windows.Forms.SortOrder.Descending:
CustomSort(columnBindingName, "asc");
dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
break;
}
}
}
/// <summary>
/// 自定義排序
/// </summary>
/// <param name="columnName">綁定的字段名</param>
/// <param name="sortMode">排序方式 asc 升序 desc 降序</param>
private void CustomSort(string columnBindingName, string sortMode)
{
DataTable dt = this.dgv_Users.DataSource as DataTable;
DataView dv = dt.DefaultView;
dv.Sort = columnBindingName + " " + sortMode;
this.dgv_Users.DataSource = dv.ToTable();
this.dgv_Users.Refresh();
}到此這篇關(guān)于DataGridView實(shí)現(xiàn)點(diǎn)擊列頭升序和降序排序的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)讓ListBox適應(yīng)最大Item寬度的方法
這篇文章主要介紹了C#實(shí)現(xiàn)讓ListBox適應(yīng)最大Item寬度的方法,涉及ListBox控件的操作技巧,需要的朋友可以參考下2015-05-05
C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例
這篇文章主要介紹了C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例,幫助大家更好的理解和使用C#,感興趣的朋友可以了解下2020-09-09
C#中利用代理實(shí)現(xiàn)觀察者設(shè)計(jì)模式詳解
學(xué)習(xí)模式注重精髓而非模板,本文為了便于說明假定了三方并對三方功能進(jìn)行了劃分,實(shí)際應(yīng)用并不拘泥于此。如果情況合適將數(shù)據(jù)(文檔)類設(shè)計(jì)為單件模式也是一種很不錯(cuò)的選擇2014-01-01
C#實(shí)現(xiàn)將Email地址轉(zhuǎn)成圖片顯示的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將Email地址轉(zhuǎn)成圖片顯示的方法,涉及C#操作圖片的相關(guān)技巧,需要的朋友可以參考下2015-06-06

