数据集列的自定义排序

时间:2020-03-06 14:54:23  来源:igfitidea点击:

我有一个包含几列的数据集。在大多数情况下,这些列之一是许多列。因为偶尔是一个字符串,所以在数据库中它是varchar(10)列。

但是,当我们对varchar列进行排序时,它会像字符串一样对它进行排序。我要做的是尝试以某种方式覆盖它,以便它像整数一样对整数进行排序。这并不难,我已经在我的代码的其他地方有了一个可以做到这一点的函数。但是,我认为不可能像我有自定义类型那样使用自己的排序实现来提供类型化的DataSet,并且从我可以看出BindingSource根本不考虑列,这使得很难进行排序他们。我可以使用ListView / DataGridView排序功能轻松地做到这一点-但由于我拥有的数据量大,我希望显示器处于虚拟模式,为此我仍然需要提供自己的排序方式。

有什么办法可以做我想做的事吗?

解决方案

我认为我们最好的选择是添加一个新的计算列,该列将varchar(10)转换为int并对其进行排序。

myDataTable.Columns.Add("Sorter", typeof(System.Int32), "Convert(TextColumn, 'System.Int32')");

当varchar列中的字符串(在上面的代码中我称为" TextColumn")时,这将引发异常,但是我们可以使用表达式中的Iif()函数调用来解决该问题。