C# DataTable 按数字排序问题

本文介绍了一种在数据表中实现正确数值排序的方法。通过添加额外的列来存储转换后的数值,并利用此列进行排序,解决了传统字符串排序导致的问题。示例展示了如何在C#中实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用dt.DefaultView.Sort = "RateSort desc"; 方法

排序出来的顺序是1,10,2,20,3,30

而非 1,2,3,10,20,30

解决方案:

按数值排序,可以添加一列转换为数值后的列

dtSum.Columns.Add("RateSort", typeof(int));

将此列的值存放要排序的数值型

例:

dtSum.Columns.Add("Rate");//用于显示

dtSum.Columns.Add("RateSort", typeof(int));//用于排序

double douRate = (douFirstTime / double.Parse(dtSum.Rows[i][1].ToString()))*100;
dtSum.Rows[i]["RateSort"] = douRate;

dtSum.Rows[i]["Rate"] =double.Parse(douRate.ToString("0.00")) +"%";

//绑定

DataView dv = dtSum.DefaultView;
dv.Sort = "RateSort desc";
 this.dgvAgentFirstTime.DataSource = dv.Table;

 

 

### C# 中对 `DataTable` 进行数据筛选和排序的方法 #### 使用 Select 方法进行筛选和排序 可以通过 `Select()` 方法实现简单的筛选和排序操作。此方法接受两个参数:一个是用于过滤的表达式字符串,另一个是排序依据的字段列表。 ```csharp DataRow[] dataRows = dataTable.Select("条件", "id asc"); // 或多列排序 DataRow[] dataRows = dataTable.Select("条件", "id asc,name asc"); // 对所有记录进行排序 DataRow[] allSortedRows = dataTable.Select("1=1", "id asc,name asc"); ``` 这种方法适用于较为基础的需求[^1]。 #### 利用 Linq 查询语法 对于更复杂的情况,可以采用 LINQ 来查询 `DataTable` 的内容。首先需调用 `AsEnumerable()` 将其转为可枚举对象,之后便能运用各种标准查询运算符来进行灵活的操作。 ```csharp var query = from row in dataTable.AsEnumerable() where row.Field<int>("ID") > 5 && row.Field<string>("Name").StartsWith("A") orderby row.Field<int>("Age") descending select new { ID = row.Field<int>("ID"), Name = row.Field<string>("Name"), Age = row.Field<int>("Age") }; foreach (var item in query) { Console.WriteLine($"{item.ID}, {item.Name}, {item.Age}"); } ``` 这种方式提供了更大的灵活性以及更好的性能优化可能性[^2]。 #### 应用 DataView 实现动态筛选与排序 如果希望创建一个可视化的视图以便于后续绑定到控件上,则推荐使用 `DataView` 类型的对象。通过设置它的属性如 `RowFilter` 和 `Sort` 可轻松完成所需功能。 ```csharp string filterValue; filterValue = dataTable.Rows[0]["InvoiceNumber"].ToString(); DataView view = dataTable.DefaultView; view.RowFilter = $"InvoiceNumber = '{filterValue}'"; view.Sort = "Date DESC"; dataGridView.DataSource = view; // 绑定至 DataGridView 控件显示 ``` 这不仅简化了代码逻辑还提高了用户体验效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值