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。
/// <summary>
/// 点击列表头触发此事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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
转载于:https://my.oschina.net/Tsybius2014/blog/892485
分享到:
相关推荐
完全是源码,可以很好地解决C# Winform中对DataGridView 进行排序后,行的颜色,单元格颜色改变了的方法: 在赋数据源时:把 DataGridView1.DataSource=DataTable1,去掉,用我提供的源码的方法,再数据源就可以了: 改成...
在实际应用中,可能还需要考虑其他因素,如数据绑定、动态生成列头、自定义排序规则等。`winform datagridview多层表头`的功能使得数据可视化更加灵活,提高了用户体验。通过深入了解和掌握这个知识点,你可以创建出...
WinForm ListView,DataGridView通用分页控件,因为自己要用,自己根据网上搜罗的一些代码进行重新封装,文件中有一个PagerNavigate.dll文件,包含了两种分页控件,ListView,DataGridView可以通用任何一个分页控件。...
//设置列表头 foreach (DataGridViewColumn headerCell in dataGridView1.Columns) { dt.Columns.Add(headerCell.HeaderText); } foreach (DataGridViewRow item in dataGridView1.Rows) { dr = dt.NewRow(); for ...
c# winform ===datagridview 单元格合并 c# winform ===datagridview 单元格合并 c# winform ===datagridview 单元格合并
"基于C#的WinForm中DataGridView控件操作汇总" 在C#的WinForm中,DataGridView控件是一种常见的控件,用于显示和编辑表格数据。下面将对DataGridView控件的操作进行汇总。 一、单元格内容的操作 在DataGridView...
winForm扩展DataGridView控件实现一列多操作(如查看详情、修改、删除等)按钮,使用VB.NET语言通过扩展DataGridViewButtonCell单元格,在单元格内画按钮的方式来实现。具体效果请看我的博文...
在Windows Forms(WinForm)应用程序中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地显示和编辑表格数据。然而,在多线程环境中,直接对`DataGridView`进行操作可能会导致一些问题,最常见的就是出现...
标题提到的“C# winform下的DataGridview分页控件源代码”正是这样一个解决方案。 首先,我们来看`Pager.Designer.cs`和`Pager.cs`这两个文件。`Designer.cs`文件通常包含Visual Studio自动生成的控件设计时元数据...
本文将详细讨论如何在Winform的`DataGridView`中设置文本输入改变事件。 首先,我们需要理解`DataGridView`的工作原理。`DataGridView`是由多个单元格(Cells)组成的,其中一种类型的单元格是`...
在C# WinForm开发中,`DataGridView`是一个非常常用的控件,用于展示表格数据。它提供了丰富的功能,如数据编辑、排序、分页等。在实际应用中,有时我们需要将`DataGridView`中的数据打印出来,方便用户进行查看或...
在Windows Forms(Winform)开发中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地展示表格数据并提供交互功能。在这个特定的场景中,我们关注的是如何在`DataGridView`的表头添加一个`CheckBox`,以便...
在Windows Forms(Winform)开发环境中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地展示表格数据并进行交互。在某些应用中,我们可能需要在`DataGridView`的底部添加一个总计行,来显示列数据的总和...
在Windows Forms(Winform)开发中,`DataGridView`控件是一个强大的数据展示工具,它可以用于显示和编辑表格数据。在某些场景下,我们可能需要在`DataGridView`中添加复选框(CheckBox)列,以便用户可以对数据进行...
C#winform:调用bartender进行打印(动态表格数据,模糊查询,选择表格行进行多行打印)
`DataGridView`控件是.NET Framework提供的一种用于显示和编辑数据的控件,它可以与各种数据源(如数据库、数组或对象集合)绑定,并支持多种交互操作,如排序、过滤和编辑。 要实现可折叠功能,我们需要创建自定义...
本文将深入探讨“Winform DataGridView 移动列”这一主题,旨在帮助开发者更好地理解和实现列的动态调整功能。 首先,理解DataGridView的基本结构至关重要。这个控件由一系列行和列组成,每一列可以包含不同类型的...
c#winform:使用数据库数据操控bartender实例
【WinForm Control - DataGridView 编程36计】 在.NET框架中,WinForm应用程序中用于数据展示和编辑的常用控件之一就是DataGridView。这个控件提供了丰富的功能,允许用户进行数据的查看、编辑和交互。以下是一些...