`
wx1569582009
  • 浏览: 119560 次
文章分类
社区版块
存档分类
最新评论

Winform:指定DataGridView排序规则

 
阅读更多

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

分享到:
评论

相关推荐

    DataGridView c# winform解决排序后行颜色丢失的问题

    完全是源码,可以很好地解决C# Winform中对DataGridView 进行排序后,行的颜色,单元格颜色改变了的方法: 在赋数据源时:把 DataGridView1.DataSource=DataTable1,去掉,用我提供的源码的方法,再数据源就可以了: 改成...

    winform datagridview多层表头

    在实际应用中,可能还需要考虑其他因素,如数据绑定、动态生成列头、自定义排序规则等。`winform datagridview多层表头`的功能使得数据可视化更加灵活,提高了用户体验。通过深入了解和掌握这个知识点,你可以创建出...

    C# WinForm ListView,DataGridView通用分页控件

    WinForm ListView,DataGridView通用分页控件,因为自己要用,自己根据网上搜罗的一些代码进行重新封装,文件中有一个PagerNavigate.dll文件,包含了两种分页控件,ListView,DataGridView可以通用任何一个分页控件。...

    C#万能打印--winform中打印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控件操作汇总

    "基于C#的WinForm中DataGridView控件操作汇总" 在C#的WinForm中,DataGridView控件是一种常见的控件,用于显示和编辑表格数据。下面将对DataGridView控件的操作进行汇总。 一、单元格内容的操作 在DataGridView...

    VB.NET:winForm扩展DataGridView控件实现一列多操作(如查看详情、修改、删除等)按钮

    winForm扩展DataGridView控件实现一列多操作(如查看详情、修改、删除等)按钮,使用VB.NET语言通过扩展DataGridViewButtonCell单元格,在单元格内画按钮的方式来实现。具体效果请看我的博文...

    winform_datagridview多线程出现红叉解决方案

    在Windows Forms(WinForm)应用程序中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地显示和编辑表格数据。然而,在多线程环境中,直接对`DataGridView`进行操作可能会导致一些问题,最常见的就是出现...

    C# winform下的DataGridview分页控件源代码

    标题提到的“C# winform下的DataGridview分页控件源代码”正是这样一个解决方案。 首先,我们来看`Pager.Designer.cs`和`Pager.cs`这两个文件。`Designer.cs`文件通常包含Visual Studio自动生成的控件设计时元数据...

    winform中DatagridView中文本输入框输入改变事件

    本文将详细讨论如何在Winform的`DataGridView`中设置文本输入改变事件。 首先,我们需要理解`DataGridView`的工作原理。`DataGridView`是由多个单元格(Cells)组成的,其中一种类型的单元格是`...

    c#winform datagridview打印整个列表的例子,源码奉上

    在C# WinForm开发中,`DataGridView`是一个非常常用的控件,用于展示表格数据。它提供了丰富的功能,如数据编辑、排序、分页等。在实际应用中,有时我们需要将`DataGridView`中的数据打印出来,方便用户进行查看或...

    winform DataGridView表头带CheckBox全选

    在Windows Forms(Winform)开发中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地展示表格数据并提供交互功能。在这个特定的场景中,我们关注的是如何在`DataGridView`的表头添加一个`CheckBox`,以便...

    winform DataGridView 合计行控件

    在Windows Forms(Winform)开发环境中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地展示表格数据并进行交互。在某些应用中,我们可能需要在`DataGridView`的底部添加一个总计行,来显示列数据的总和...

    Winform中DataGridView中加checkBox列的用法

    在Windows Forms(Winform)开发中,`DataGridView`控件是一个强大的数据展示工具,它可以用于显示和编辑表格数据。在某些场景下,我们可能需要在`DataGridView`中添加复选框(CheckBox)列,以便用户可以对数据进行...

    C#winform:调用bartender进行打印(多选行实现)

    C#winform:调用bartender进行打印(动态表格数据,模糊查询,选择表格行进行多行打印)

    WinForm可折叠的DataGridView控件

    `DataGridView`控件是.NET Framework提供的一种用于显示和编辑数据的控件,它可以与各种数据源(如数据库、数组或对象集合)绑定,并支持多种交互操作,如排序、过滤和编辑。 要实现可折叠功能,我们需要创建自定义...

    Winform DataGridView 移动列

    本文将深入探讨“Winform DataGridView 移动列”这一主题,旨在帮助开发者更好地理解和实现列的动态调整功能。 首先,理解DataGridView的基本结构至关重要。这个控件由一系列行和列组成,每一列可以包含不同类型的...

    c#winform:使用数据库数据操控bartender

    c#winform:使用数据库数据操控bartender实例

    WinForm Control - DataGridView 编程36计

    【WinForm Control - DataGridView 编程36计】 在.NET框架中,WinForm应用程序中用于数据展示和编辑的常用控件之一就是DataGridView。这个控件提供了丰富的功能,允许用户进行数据的查看、编辑和交互。以下是一些...

Global site tag (gtag.js) - Google Analytics