DataGridView点击排序完成后如何禁止自动排序
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点击排序完成后如何禁止自动排序的更多相关文章
- 【前台页面 BUG】回车按钮后,页面自动跳转
点击回车按钮后,页面自动的迅速跳转 原因: 表单隐式提交了. 解决方法: 在方法执行完成后,加上return false; 代码如下: /** * 注册按钮的点击事件 */ $("#regi ...
- java学习-排序及加密签名时数据排序方式
排序有两种 1. 类实现comparable接口调用List.sort(null)或Collections.sort(List<T>)方法进行排序 jdk内置的基本类型包装类等都实现了Co ...
- winform dataGridView 点击列标题排序
winform手动绑定数据后,点击列标题不能实现自动排序,苦苦寻找方法,发现下面的是可行的. //建立DataTable将当前dataGridView中的数据读进DataTable中 public D ...
- Jquery插件实现点击获取验证码后60秒内禁止重新获取
通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能 先到官网(http://plugins.jquery.com/cookie/ )下载coo ...
- layui表格点击排序按钮后,表格绑定事件失效解决方法
最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...
- 点击<a>标签后禁止页面跳至顶部
一.点击<a>标签后禁止页面跳至顶部 1. 使用 href="javascript:void(0);",例如: <a href="javascript: ...
- 页面上有3个输入框:分别为max,min,num;三个按钮:分别为生成,排序,去重;在输入框输入三个数字后,先点击生成按钮,生成一个数组长度为num,值为max到min之间的随机整数点击排序,对当前数组进行排序,点击去重,对当前数组进行去重。 每次点击之后使结果显示在控制台
<!DOCTYPE html> <html> <head> <!-- 页面上有3个输入框:分别为max,min,num:三个按钮:分别为生成,排序,去重: 在 ...
- 禁用datagridview中的自动排序功能
把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...
- php文件管理,能够点击依照时间,大小,名称排序
php文件管理.能够点击依照时间.大小,名称排序 本例没实用到jquery 演示 PHP Code <?php $rootdir="./"; $spacen ...
随机推荐
- ORACLE 查看数据库中有哪些表
SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME;
- crm 4 IFRAME 元素隐藏
function hidebtn(elementTitle) { var x = document.getElementsByTagName("LI"); for (i = 0; ...
- android github
Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library ...
- select into from 和 insert into select 的用法和区别
select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建.insert ...
- BC之The mook jong
Problem Description ZJiaQ want to become a strong man, so he decided to play the mook jong.ZJiaQ wan ...
- JQuery基础教程:选择元素(上)
jQuery最强大的特性之一就是它能够简化在DOM中选择元素的任务,DOM中的对象网络与家谱有几分类似,当我们提到网络中元素之间的关系时,会使用类似描述家庭关系的术语,比如父元素.子元素,等等.通过一 ...
- 日期:Date
API--- java.util.Date:日期类,月份从0-11: 日期对象和毫秒值之间的转换. 1,日期对象转成毫秒值.Date类中的getTime方法. 2,如何将获取到的毫秒值转成具体的日期呢 ...
- 前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前.通过对比我们选择了 Karma + jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 K ...
- 利用Oracle VM VirtualBox部署自己的owncloud存储服务器
最近在弄文档方面的工作,所以想找个能够自动备份且带历史版本的网盘,找了很久没找到,所以决定自己部署一个私人服务器. 找了很久.试了很久终于确定owncloud能够满足自己的要求,而且还是开源免费的. ...
- 了解Entity Framework中事务处理
Entity Framework 6以前,框架本身并没有提供显式的事务处理方案,在EF6中提供了事务处理的API. 所有版本的EF,只要你调用SaveChanges方法进行插入.修改或删除,EF框架会 ...