Winform:指定DataGridView排序规则

您所在的位置:网站首页 升序和降序什么意思时间 Winform:指定DataGridView排序规则

Winform:指定DataGridView排序规则

2024-02-10 11:37| 来源: 网络整理| 查看: 265

Winform中的DataGridView,可通过鼠标单击列表头,按指定列的升序/降序排列数据,不过这种排列方式也有一定局限性。举例来说,若DataGridView内数据为后台传入的分页查询后得到的数据,单击列头也只能改变一页内的数据排列顺序,这样的排序就没有意义了。

因此,需要找到一个办法,在用鼠标单击列表头后,按我们自己制定的规则,重新生成DataGridView内的数据。方法如下:

新建一个窗体FormMain,上面放置了DataGridView控件,包含4列,名称分别为col0、col1、col2、col3

窗体的Load函数代码如下:

private void FormMain_Load(object sender, EventArgs e) { this.dgvTest.SelectionMode = DataGridViewSelectionMode.FullRowSelect; DataGridViewCellStyle dgvCellStyle = new DataGridViewCellStyle(); dgvCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dgvTest.ColumnHeadersDefaultCellStyle = dgvCellStyle; foreach (DataGridViewColumn dgvc in dgvTest.Columns) { dgvc.SortMode = DataGridViewColumnSortMode.Programmatic; //重点在这个属性 dgvc.DefaultCellStyle = dgvCellStyle; } this.dgvTest.DataSource = DataHelper.GetTableDefault(); //这里返回默认排序后的数据 }

上面的代码中,将所有列的SortMode都改成了Programmatic,设定为Programmatic的列,在鼠标点击列头后将适用于我们指定的排序规则。实际操作中,也可以根据实际情况,在DataGridView的列设置界面有针对性的设置指定几列的SortMode。

/// /// 点击列表头触发此事件 /// /// /// private void dgvTest_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { int index = e.ColumnIndex; //只有排序模式为Programmatic的列触发指定排序规则 if (dgvTest.Columns[index].SortMode != DataGridViewColumnSortMode.Programmatic) { return; } switch (dgvTest.Columns[index].HeaderCell.SortGlyphDirection) { case SortOrder.None: case SortOrder.Ascending: //-----TODO----- 升序:在这里加入各列排序的逻辑 -----TODO----- switch (index) { case 0: dgvTest.DataSource = DataHelper.GetTableOrderBy0Asc(); break; //这里返回指定规则排序后的数据 case 1: dgvTest.DataSource = DataHelper.GetTableOrderBy1Asc(); break; case 2: dgvTest.DataSource = DataHelper.GetTableOrderBy2Asc(); break; case 3: dgvTest.DataSource = DataHelper.GetTableOrderBy3Asc(); break; default: dgvTest.DataSource = DataHelper.GetTableDefault(); break; } //设置列标题右侧三角形状 dgvTest.Columns[index].HeaderCell.SortGlyphDirection = SortOrder.Descending; break; case SortOrder.Descending: //-----TODO----- 降序:在这里加入各列排序的逻辑 -----TODO----- switch (index) { case 0: dgvTest.DataSource = DataHelper.GetTableOrderBy0Desc(); break; //这里返回指定规则排序后的数据 case 1: dgvTest.DataSource = DataHelper.GetTableOrderBy1Desc(); break; case 2: dgvTest.DataSource = DataHelper.GetTableOrderBy2Desc(); break; case 3: dgvTest.DataSource = DataHelper.GetTableOrderBy3Desc(); break; default: dgvTest.DataSource = DataHelper.GetTableDefault(); break; } //设置列标题右侧三角形状 dgvTest.Columns[index].HeaderCell.SortGlyphDirection = SortOrder.Ascending; break; } }

其中,DataHelper是一个数据生成类,在现实环境下,返回值为排序后的DataTable、数组等数据结构,直接放入DataGridView的DataSource中即可。

DEMO程序下载地址:https://pan.baidu.com/s/1jHNLkea

END



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3