Summary: Disable sorting after clicking DataGridView columnheader,Prevent databound DataGridView from sorting while editing!

Problem:I have a databound DataGridView in a WinForms which the user may have sorted by a column. The problem is this: after the user leaves a row after editing a cell in the sorted column, the row is immediately re-sorted.This is very disorienting for users and makes editing groups of rows together impossible.

Solution: re-databound when user start editing, run program, or sorted finish, to do that can disable automatic re-sorting.ting after an initial sort and then only sort again when the user requests it.

/// <summary>
/// 控件状态 When the Program start or stop, we can re-databound dgv to disable re-sorting
/// </summary>
public void ChangeStatus(bool status)
{
Invoke((ThreadStart)delegate()
{
mydgv.Columns["status"].SortMode = status ? DataGridViewColumnSortMode.Automatic : DataGridViewColumnSortMode.NotSortable;//排序功能状态更改
if (status)
{
mydgv.Sort(mydgv.Columns["status"], ListSortDirection.Ascending); //停止运行任务,自动排序
}
else
{
DataGridViewRebindsource(mydgv); //开始运行任务,排序完后重新绑定数据
}
});
} /// <summary>
/// 列头单击排序事件——after ColumnHeaderMouseClick to re-databound dgv to disable re-sorting
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mydgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
switch (mydgv.SortOrder)
{
case System.Windows.Forms.SortOrder.None:
mydgv.Sort(mydgv.Columns[e.ColumnIndex], ListSortDirection.Ascending);
break;
case System.Windows.Forms.SortOrder.Ascending:
mydgv.Sort(mydgv.Columns[e.ColumnIndex], ListSortDirection.Descending);
break;
case System.Windows.Forms.SortOrder.Descending:
mydgv.Sort(mydgv.Columns[e.ColumnIndex], ListSortDirection.Ascending);
break;
} DataGridViewRebindsource(mydgv); //排序完后重新绑定数据
} /// <summary>
/// 重新绑定dgv数据 清除自动排序 —— function: re-databound dgv to disable re-sorting
/// </summary>
/// <param name="dgv"></param>
public void DataGridViewRebindsource(DataGridView dgv)
{
DataTable table = new DataTable();
int dgvColumnsNum = dgv.Columns.Count;
int dgvRowsNum = dgv.Rows.Count;
//获取datagridview的列
foreach (DataGridViewColumn dgvc in dgv.Columns)
{
if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
{
DataColumn dc = new DataColumn();
dc.ColumnName = dgvc.DataPropertyName;
table.Columns.Add(dc);
}
}
//获取datagridview的行
for (int i = ; i < dgvRowsNum; i++)
{
DataRow dataRow = table.NewRow();
int j = ;
for (j = ; j < dgvColumnsNum; j++)
{
dataRow[j] = dgv.Rows[i].Cells[j].Value;
}
table.Rows.Add(dataRow);
}
dgv.DataSource = table;
}

DataGridView点击排序完成后如何禁止自动排序的更多相关文章

  1. 【前台页面 BUG】回车按钮后,页面自动跳转

    点击回车按钮后,页面自动的迅速跳转 原因: 表单隐式提交了. 解决方法: 在方法执行完成后,加上return false; 代码如下: /** * 注册按钮的点击事件 */ $("#regi ...

  2. java学习-排序及加密签名时数据排序方式

    排序有两种 1. 类实现comparable接口调用List.sort(null)或Collections.sort(List<T>)方法进行排序 jdk内置的基本类型包装类等都实现了Co ...

  3. winform dataGridView 点击列标题排序

    winform手动绑定数据后,点击列标题不能实现自动排序,苦苦寻找方法,发现下面的是可行的. //建立DataTable将当前dataGridView中的数据读进DataTable中 public D ...

  4. Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能 先到官网(http://plugins.jquery.com/cookie/ )下载coo ...

  5. layui表格点击排序按钮后,表格绑定事件失效解决方法

    最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...

  6. 点击<a>标签后禁止页面跳至顶部

    一.点击<a>标签后禁止页面跳至顶部 1. 使用 href="javascript:void(0);",例如: <a href="javascript: ...

  7. 页面上有3个输入框:分别为max,min,num;三个按钮:分别为生成,排序,去重;在输入框输入三个数字后,先点击生成按钮,生成一个数组长度为num,值为max到min之间的随机整数点击排序,对当前数组进行排序,点击去重,对当前数组进行去重。 每次点击之后使结果显示在控制台

    <!DOCTYPE html> <html> <head> <!-- 页面上有3个输入框:分别为max,min,num:三个按钮:分别为生成,排序,去重: 在 ...

  8. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  9. php文件管理,能够点击依照时间,大小,名称排序

    php文件管理.能够点击依照时间.大小,名称排序  本例没实用到jquery 演示   PHP Code <?php    $rootdir="./";    $spacen ...

随机推荐

  1. go mobile 得生命周期事件

    生命周期事件,就是状态从一个阶段切换成另外一个状态时触发的事件.所以我们可以看到 lifecycle.Event 的定义如下:   生命周期一共有下面四个阶段: lifecycle.StageDead ...

  2. Django 的 CSRF 保护机制

    转自:http://www.cnblogs.com/lins05/archive/2012/12/02/2797996.html 用 django 有多久,我跟 csrf 这个概念打交道就有久了. 每 ...

  3. asp.net 自定义文本框

    using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...

  4. Windows程序设计-窗口和消息

    本章内容比较少,没有代码类的内容,这里付思维导图一章,看起来比较清晰.

  5. locals()函数访问当前还在作用范围内的局部变量

    >>> element = 'silver' >>> number = 47 >>> 'Element {number} is {element} ...

  6. 动手学servlet(一) 第一个servlet程序

    1.文件>新建>动态WEB项目 "javaeedemo">在Java Resource的src下新建包“servletdemo”,包下新建一个类“MyServet ...

  7. cocos2d-x中false,setSwallowTouches,stopPropagation的区别

    研究到cocos2d-x触摸这一块了,3.0和2.0相比已经有了很大的不同,使用更加方便和容易理解了. 直接进入正题,解释下,标题中3个用法的区别 通常来说,应用程序中更多使用的是单点触摸,为了简化单 ...

  8. Windows下cwRsync搭建步骤

    文章(一) CwRsync是基于cygwin平台的rsync软件包,支持windows对windows.windows对Linux.Linux对windows高效文件同步.由于CwRsync已经集成了 ...

  9. 150 Opening ASCII mode data connection. FTP连接的PASV和PORT方式

    FTP连接服务器时出现 150 Opening ASCII mode data connection.一般是客户端设置PORT 主动方式连接造成的.切换成PASV 被动模式后一般能连接上. 一.什么是 ...

  10. 【Unity Shaders】学习笔记——SurfaceShader(十一)光照模型

    [Unity Shaders]学习笔记——SurfaceShader(十一)光照模型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5664792.html ...