2024年4月21日发(作者:)

WinForm DataGridView 停止排序功能.

为什么需要停止排序? 我遇到如下情况,DataGridView加载数据后,用户点击了列标题排序,这时如

果用户想增加一个新行或者修改了排序列中的某个值,DataGridView会自动排序,影响用户编辑,编辑行

的位置变来变去,很不友好。 那么,能不能暂停DataGridView的排序功能呢? 网上搜索了很多资料,并没

有直接的方法解决。 DataGridView 一旦设置了排序就没有直接的方法去停止排序了。 即使把所有列的

SortMode重新设置成NotSortable也是不行的。

以下提供变通方法:

方案一: 以下例子中urce为DataTable。

一、 为datatable增加一个int类型的列,名字为FInnerSort,此列不与数据库中的列关联,只用于

DataGridView排序用. 此列可以用代码加上去,如:("FInnerSort",

GetType(32))

也可以直接在SQL语句中加, select ColA,ColB,0 as FInnerSort FROM …

如果是使用VS的DataSet编辑器,可以手工增加一个列,source空白(这样就不与数据库关联)设置如

图:

二、 设计好DataGridView中列与datatable中的列一一对应。其中与FInnerSort对应的列要隐藏起

来,这个列用于排序

三、FormLoad 事件中写

em = fillData() ‘这里省略赋值语句

nerateColumns = False '不自动生成列

urce = em

For Each col As DataGridViewColumn In s

If de = tic Then

de = mmatic '设置列只能通