如何在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中添加一行