在datagridview中排序数字列
本文关键字:数字 排序 datagridview | 更新日期: 2023-09-27 18:06:28
我正在使用datagridview来显示csv文件中的数据。datagridview中数字类型[column name: ID]的列之一。
我正在使用datagridview的自动排序方法(通过单击列标题排序)。这对于除了这个数字列之外的所有列都很有效。此列包含数字1到55
我现在得到的排序后是:
1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,24,25,26,27,28,29,3,30,31...
…等等......我想要的是:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,...
请帮助。
您可以这样使用事件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
}
}
创建DataTable:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(Int32));
dt.Columns.Add("Name");
dt.Columns.Add("ForeName");
我正在使用这些列,因为我不知道你在存储什么数据。
读取csv文件后,必须遍历数据。考虑到您的数据存储在字符串数组(String[][] arr)中,内部ArrayLength为3 (ID, Name, rename)。
for(int i=0;i<arr.Length;i++)
{
DataRow row = dt.NewRow();
row["ID"] = Convert.ToInt32(arr[i][0]);
row["Name"] = arr[i][1];
row["ForeName"] = arr[i][2];
dt.Rows.Add(row);
}
DataGridView dgv = new DataGridView();
dgv.DataSource = dt;
我希望这有帮助,这是一个示例代码。
对DataTable的引用:https://msdn.microsoft.com/de-de/library/system.data.datatable(v=vs.110).aspx
编辑
我刚刚读到你已经有一个数据表作为结果。您可以像我一样构建另一个DataTable,遍历Data并将ID转换为Integer。请不要忘记设置列类型:
dt.Columns.Add("ID", typeof(Int32));
您的列不是数字列,而是包含数字字符串值的文本列。这是一个巨大的区别!真正的数值列将应用数值排序,而您的列将使用字母数字排序。
我会尝试实际更改底层数据类型为int
而不是string
或按lem2802
建议应用手动排序。
请添加一些关于如何填充数据网格视图的信息。也许这可以帮助找到一种比实现手动排序比较更简单的方法。
根据您的评论,您创建了一个DataTable
作为网格视图的数据源。您需要确保包含数值的列也具有数值类型。在创建表及其列的代码中,执行如下操作:
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(Int32));
... // Other columns
稍后,当您根据CSV文件的内容创建行时,请确保填充每行,以便ID列的值实际上是int
:
DataRow row = table.NewRow();
row["ID"] = Convert.ToInt32(idValueFromCSV);
... // Other columns
这样你就可以得到你想要的,而不需要实现自定义排序。