【问题标题】:how to sort string as number in datagridview in winforms如何在winforms的datagridview中将字符串排序为数字
【发布时间】: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

【问题讨论】:

    标签: c# winforms datagridview sorting


    【解决方案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 并提取值。我应该在解决方案中尝试这个,而不是徒手尝试。
        猜你喜欢
        • 2015-09-28
        • 1970-01-01
        • 2010-11-18
        • 2012-01-20
        • 2021-11-22
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 2016-02-14
        相关资源
        最近更新 更多