DataGridView SortCompare事件不会触发

Dav*_*N59 4 c# events .net-3.5 winforms

使用VS2008,C#和.NET 3.5

我正在使用数据绑定DataGridView控件来显示从Web服务读取的表格数据.在某些情况下,需要对数字列进行排序.我已尝试了几种不同的方法来实现此功能,但该列仍然按字母顺序排序(即1,10,2,3而不是1,2,3,10).

将列数据类型设置为int对数据绑定控件不起作用,因此唯一真正的方法是提供一些自定义排序逻辑.

许多人建议连接到SortCompare事件以提供自定义排序逻辑,但由于某种原因,事件代码永远不会运行 - 我可以在处理程序中放置一个断点,它永远不会到达那里.我通过GUI添加事件处理程序,因此处理程序由VS添加到控件,而不是手动添加.

这是事件处理程序代码,从这里的某处提升:

    private void uxLicensedSoftwareDataGridView_SortCompare( object sender, 
                                          DataGridViewSortCompareEventArgs e )
    {
        int intValue1, intValue2;

        if ( !Int32.TryParse( e.CellValue1.ToString(), out intValue1 ) )
            return;
        if ( !Int32.TryParse( e.CellValue2.ToString(), out intValue2 ) )
            return;

        if ( intValue1 == intValue2 )
            e.SortResult = 0;
        else if ( intValue1 < intValue2 )
            e.SortResult = -1;
        else
            e.SortResult = 1;

        e.Handled = true;
    }
Run Code Online (Sandbox Code Playgroud)

如果这被解雇了,它将完全按照我的意愿行事.我能错过什么?

谢谢你指出(希望)显而易见......戴夫

Jac*_*nev 7

将每列的排序模式设置为"自动"而不是"程序化"

也来自这份文件:

设置DataSource属性或VirtualMode属性值为true时,不会发生SortCompare事件.

  • 谢谢.大约10秒前我找到了你的答案的第二部分,但如果你使用DataSource属性,你应该如何进行自定义排序?这对我来说听起来像是一个糟糕(或懒惰)的设计决定,但我想我不知道整个故事...... (2认同)

Jac*_*nev 3

当DataGridView进行数据绑定时,数据源也可以进行排序。

一些数据源内置了对排序的支持。您的数据源实现 IBindingList 或 IBindingListView 排序属性和方法,以各种方式对数据源进行排序。