gpt4 book ai didi

c# - 在 DataGridViewTextBoxColumn 中按数字排序

转载 作者:太空狗 更新时间:2023-10-29 20:01:20 26 4
gpt4 key购买 nike

这个问题与这两个(thisthis)密切相关,但我认为他们没有给出令人满意的答案。

我有一个 DataGridView(即表格),其中包含不同数据类型的多个列 (DataGridViewTextBoxColumn):字符串、整数和 float 。当我单击它们各自的标题时,应根据它们的类型对每个标题进行排序:按字母顺序排列的字符串和按数字排列的数值。简单地说,我有以下代码:

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

显然,根据某些线程(例如 herehere),作为解决此问题的简单方法,以下应该可以立即解决问题:

doubleColumn.ValueType = typeof(double);
intColumn.ValueType = typeof(int);

但是,这个解决方案在我的项目中根本不起作用:值仍然按字母顺序排序。所以问题是:为什么不呢?在调试器中,我可以看到值类型实际上更改为(在 double 情况下)System.Double,所以至少发生了一些事情。但是,如果不编写我自己的排序器,我如何才能确保它确实对其进行了相应的排序?

最佳答案

您可以处理事件 SortCompare 以更改排序的完成方式,如下所示:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) {
//Suppose your interested column has index 1
if (e.Column.Index == 1){
e.SortResult = int.Parse(e.CellValue1.ToString()).CompareTo(int.Parse(e.CellValue2.ToString()));
e.Handled = true;//pass by the default sorting
}
}

注意:以上代码假设您的单元格值可转换为 int

你说你的 DataGridView 没有分配 DataSource,这意味着你手动 Add 行,所以我认为你应该使用 numeric 值而不是 string 用于您的单元格。这将使排序工作如您所愿。

关于c# - 在 DataGridViewTextBoxColumn 中按数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18921470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com