这个问题与这两个( this和this )密切相关,但我认为他们没有给出令人满意的答案。
我有一个DataGridView
(即一个表),其中包含不同数据类型的几列(DataGridViewTextBoxColumn
):字符串、整数和浮点数。当我单击它们各自的标题时,每个都应根据它们的类型进行排序:按字母顺序排列的字符串和按数字排列的数值。简单地说,我有以下代码:
private System.Windows.Forms.DataGridView grid;
private System.Windows.Forms.DataGridViewTextBoxColumn stringColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn doubleColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn intColumn;
stringColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
doubleColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
intColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
grid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
stringColumn,
doubleColumn,
intColumn});
但是,由于默认表示为string
,因此数值也会按字母顺序排序,例如:
1, 11, 2, 3, 42, 5
显然,作为解决这个问题的一种简单方法,根据一些线程(例如这里和这里),以下应该可以立即解决问题:
doubleColumn.ValueType = typeof(double);
intColumn.ValueType = typeof(int);
但是,这个解决方案在我的项目中根本不起作用:值仍然按字母顺序排序。所以问题是:为什么不呢?在调试器中,我可以看到值类型实际上更改为 (in the double
case) System.Double
,所以至少发生了一些事情。但是,如果不编写我自己的分拣机,我如何才能确保它确实对它进行了相应的排序呢?