我有一个包含几列的DataSet。其中一列是一个数字 - 大部分时间。因为它偶尔会是一个字符串,所以在数据库中它是一个varchar(10)列。
但是,在对varchar列进行排序时,它会将其排序为字符串。我想要做的是尝试以某种方式覆盖它,以便它像整数一样排序整数;这并不是那么难,我已经有了一个在我的代码中的其他地方执行此操作的函数。但是,我认为不可能给出一个类型化的DataSet,就像我有一个带有自己的排序实现的自定义类型,从我可以看到BindingSource根本不考虑列,这使得很难排序他们。我可以使用ListView / DataGridView排序功能轻松地完成它 - 但我希望显示器处于虚拟模式,因为我拥有的数据量,为此我还需要提供自己的排序。
有什么办法可以做我想做的事吗?
答案 0 :(得分:2)
我认为最好的办法是添加一个新的计算列,将varchar(10)转换为int,并对其进行排序。
myDataTable.Columns.Add("Sorter", typeof(System.Int32), "Convert(TextColumn, 'System.Int32')");
这将在varchar列中的字符串(我在上面的代码中称为“TextColumn”)中抛出异常,但是您可以使用表达式中的Iif()函数调用来解决这个问题