虽然您可以通过编程任意列进行排序的DataGridView,一些栏目,如按钮列,可能不包含可以有意义的有序。对于这些列,一个NotSortable SortMode属性设置表示,它将永远不会被用于排序的,所以没有必要储备为排序标志符号头空间。
当DataGridView的排序,你可以同时确定排序列和通过检查SortedColumn和SortOrder的属性的进行排序。这些不是一个自定义排序操作??后,有意义的。有关自定义排序信息,请参见本主题中的自定义排序节后面。
当DataGridView控件同时包含绑定和未绑定列进行排序,在未绑定列的不能自动维护。为了保持这些,你必须执行VirtualMode属性设置为true,并处理CellValueNeeded和CellValuePushed事件虚拟模式。
5.6.1编程排序
您可以排序的DataGridView编程方式调用它的排序方法。
本的Sort(DataGridViewColumn,ListSortDirection)Sort方法重载采用DataGridViewColumn和一个枚举作为参数ListSortDirection。此重载时非常有用,可以通过与有意义的命令,但你不想配置的列自动分拣排序。当调用此重载并同一个DataGridViewColumnSortMode.Automatic的SortedColumn和SortOrder的性能SortMode属性列通过自动设置和相应的排序标志符号出现在列标题。
注意:当DataGridView控件绑定通过设置DataSource属性到外部数据源,的Sort(DataGridViewColumn,ListSortDirection)方法重载不能用于未绑定列。此外,当VirtualMode属性为true,则可以只绑定列调用此重载。要确定是否列是数据绑定,检查IsDataBound属性。在绑定模式下未绑定列排序不受支持。
5.6.2自定义排序
您可以通过使用自定义的Sort(IComparer)Sort方法重载或通过处理DataGridView的SortCompare事件。
的Sort(IComparer)方法重载采用一个实现类作为参数的IComparer接口的实例。此重载很有用,当您要提供自定义排序,例如,当在一列中的没有自然排序顺序或者当自然排序顺序是不适当的。在这种情况下,您不能使用自动排序,但您可能仍然希望用户通过点击排序列标题。你还可以打电话为ColumnHeaderMouseClick此重载事件处理程序,如果你不使用选择栏标题。
注意:的Sort(IComparer)方法重载仅当DataGridView控件未绑定到外部数据源和VirtualMode属性为false。要自定义绑定到外部数据源的列排序,你必须使用排序的数据源提供的操作。在虚拟模式下,你必须为自己的未绑定列排序操作。
要使用的Sort(IComparer)方法重载,您必须创建自己的类实现IComparer接口。此接口要求您的类来实现IComparer.Compare(Object)方法,对此,作为输入传递时的DataGridView的Sort(IComparer)方法重载被称为DataGridViewRow对象。有了这个,你可以计算出正确的行排序的基础上在任一列的。
的Sort(IComparer)方法重载不设置SortedColumn和SortOrder的属性,所以你必须总是设置DataGridViewColumnHeaderCell.SortGlyphDirection属性以显示排序标志符号。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-50070-36.html
还短兵相接有脸皮