C# winform 中datagridview ,如何实现点击列头,对应的列自动排序。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform 中datagridview ,如何实现点击列头,对应的列自动排序。相关的知识,希望对你有一定的参考价值。
在使用 DataGridView时,对于数值列,默认的排序方式仍然是按照字符串方式进行
如果需要按照数值型进行排序,有几种办法,其中一种就是重载SortCompare方法
//重载_SortCompare方法
private void DataGridView1_SortCompare(object sender,DataGridViewSortCompareEventArgs e)
// 如果是学号或成绩列,则按浮点数处理
if(e.Column.Name=="学号"|| e.Column.Name=="成绩")
e.SortResult = (Convert.ToDouble(e.CellValue1) - Convert.ToDouble(e.CellValue2) > 0) ? 1 : (Convert.ToDouble(e.CellValue1) - Convert.ToDouble(e.CellValue2) < 0)?-1:0;
//否则,按字符串比较
else
e.SortResult = System.String.Compare(Convert.ToString(e.CellValue1), Convert.ToString(e.CellValue2));
// 如果发现两行相同,则按学号排序
if (e.SortResult == 0 && e.Column.Name != "学号")
e.SortResult = Convert.ToInt32(DataGridView1.Rows[e.RowIndex1].Cells["学号"].Value.ToString()) -
Convert.ToInt32(DataGridView1.Rows[e.RowIndex2].Cells["学号"].Value.ToString());
e.Handled = true;//不能省掉,不然没效果
排序是以当前列的数据为排序依据. 参考技术C DataGridView gridView;
gridView.Columns[XXX].SortMode = DataGridViewColumnSortMode.Automatic;
设置某一列可以自动排序,这样可以实现你的需求么?追问
不行,这个是默认的。
如果用非连接模式,dataGridView1.DataSource = ds.Tables["aa"];,点击列头可以排序的,
但为何用连接模式绑定,绑定dataGridView1.DataSource=list,就不行了呢?
哦,那需要自定义排序了,把这一列的SortMode设置为DataGridViewColumnSortMode.Programmatic
在ColumnHeaderMouClick事件里自己给DataGridView的DataSource排序
这是我写的示例代码,希望对你有所帮助
DataGridView gridView;
gridView.Columns[XXX].SortMode = DataGridViewColumnSortMode.Programmatic;
void ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
//取得点击列的索引
int nColumnIndex = gridView.HitTest(e.X, e.Y);
if (!gridView.Columns[nColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
return;
switch (gridView.Columns[nColumnIndex].HeaderCell.SortGlyphDirection)
case SortOrder.None:
case SortOrder.Ascending:
//在这里加入排序的逻辑
//设置列标题的状体
gridView.Columns[nColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
break;
default:
gridView.Columns[nColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Descending;
break;
SortMode属性默认为Automatic
使用DataGridView里面的ColumnHeaderMouseClick事件来重写这段逻辑
下面为我的代码
private void dgvCst_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
switch (dgvCst.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection)
case SortOrder.None:
case SortOrder.Ascending:
List<Data> _lst = (from cst in Data.Where(条件)select cst).OrderByDescending(r => r.UPDATETIME).ToList();
dgvCst.DataSource = _lst;
dgvCst.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Descending;
break;
default:
List<Data> _lst1 = (from cst in Data.Where(条件) select cst).OrderBy(r => r.UPDATETIME).ToList();
dgvCst.DataSource = _lst1;
dgvCst.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
break;
点击Header列名,可以实现排序功能
C# winform 如何用datagridview增、删、改数据
单击右击菜单“添加”,就可把在datagridview中添加的数据添加到数据库。同理实现单击“修改“、”删除“的功能。
参考技术A datagridview控件中的编辑、删除、更新事件里写相应的代码。当然首先得启用它的这些功能。以上是关于C# winform 中datagridview ,如何实现点击列头,对应的列自动排序。的主要内容,如果未能解决你的问题,请参考以下文章
C# .net不同版本中winform控件 dataGrid /DataGrid/DataGridView 有啥区别
C# winform 如何用datagridview增、删、改数据
c# winform DataGridView添加一行,添加数据后,保存到数据库
winform c# Datagridview 选中行 急!!!