如何在winforms的datagridview中将字符串排序为数字

Posted

技术标签:

【中文标题】如何在winforms的datagridview中将字符串排序为数字【英文标题】:how to sort string as number in datagridview in winforms 【发布时间】:2011-02-10 02:33:45 【问题描述】:

我在 datagridview 中有带数字的字符串列。它没有绑定,我想按我使用的数字对它进行排序

colid.ValueType = typeof(int);
grid.Sort(colid, ListSortDirection.Descending);

但是有点像字符串,例如:

11
12
23
7
80
81

而预期是

7
11
12
23
80
81

【问题讨论】:

【参考方案1】:

您可以在SortCompare活动上注册,例如:

private void customSortCompare(object sender, DataGridViewSortCompareEventArgs e)

    int a = int.Parse(e.CellValue1.ToString()), b = int.Parse(e.CellValue2.ToString());

    // If the cell value is already an integer, just cast it instead of parsing

    e.SortResult = a.CompareTo(b);

    e.Handled = true;


...
yourGridview.SortCompare += customSortCompare;
...

我没有检查这是否有效,但你明白了...... ;)

【讨论】:

【参考方案2】:

当您为列赋值时,您可以转换为 Int32

DataGridView.Cells["example"].Value= Convert.ToInt32(text);

它会正确排序

【讨论】:

这个解决方案效果更好!更加简单快捷。一点点更正,只需将“t”大写:“Convert.ToInt32(text)” 这正是应该以正确的方式分隔字符串和整数排序的方法,谢谢! 如果语法正确会很有帮助。没有像 DataGridView.Cells["example"] ..... 这样的语法【参考方案3】:

您的问题是您对字符串值进行排序。当您加载列时,您必须选择列中的值类型:

dt.Columns.Add("ColumnName", typeof(int));

【讨论】:

【参考方案4】:

创建一个类:

class Sort : IComparer

    public int Compare(object x, object y)
    
        return -int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort descending
        //return int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort ascending
    

然后做

grid.Sort( new Sort() );

【讨论】:

@Mikael IComparer 应该是 System.Collections.IComparer ,进一步我们得到 x 和 y 中的 gridviewrows 因此它不能被解析为 int 或 string,所以它不起作用。 @Thunder,IComparer 是 Sysem.Collections.IComparer。我没有包含 using 语句,您对输入是正确的。但它可以很容易地更改为处理 gridviewrows 并提取值。我应该在解决方案中尝试这个,而不是徒手尝试。

以上是关于如何在winforms的datagridview中将字符串排序为数字的主要内容,如果未能解决你的问题,请参考以下文章

winform中获取datagridview如何获取选中的行,返回值object

我们如何在winform的datagridview中进行分页

C# winform datagridview如何计算统计

C# winform程序中如何向datagridview中添加一行

winform如何从DataGridView中从右键菜单获取一行数据

winform中如何在点击datagridview的时候不让窗体的滚动条自动滚动