DataGridView使用数据源自定义排序

时间:2011-02-03 14:59:12

标签: c# .net sorting datagridview dataview

在我的C#.NET应用程序中,我有一个DataGridView。网格的DataSource是一个BindingSource,BindSource绑定到DataTable的过滤DataView,它经常从SQL中重新获取。

我已经可以对网格中的列进行排序,但排序总是按字母顺序在单元格中显示的任何数据值的字符串版本上完成。我有一些显示名称的字段,但需要按特定值而不是按字母顺序排序。我也有一个字段可以是数字或“未知”字样。我需要能够自定义排序背后的逻辑。

我知道我不能使用网格的SortCompare事件,因为我使用的是绑定的DataSource。我已经尝试创建显示从IComparable派生的自定义类的列,但是对该列的排序仍然总是按字母顺序排序而不是使用我的Compare()方法。

我找到了一个可能的解决方案,涉及保留一个隐藏的DataGridViewColumn,它存储一个用于排序的数字,并使用网格的ColumnHeaderMouseClick事件强制它在用户点击“显示”列时对该隐藏的“排序”列进行排序。但是,列标题的“排序字形”(显示在排序列上的小上/下箭头图标)将不会显示,因为实际排序列是隐藏的。我尝试手动设置列的HeaderCell.SortedGlyphDirection属性,但如果BindingSource的排序不适用于该列,则该图标将始终隐藏。

我很确定如果我使用DataTable的DataView代替DataTable的DataView,我可以使用我为每个数据行创建的自定义包装器对象的可排序列表,但我不想诉诸于此如果可能的话。但如果这是我唯一的选择,那就是我要做的。

0 个答案:

没有答案