Datatable某一字段的sum(dorado)

本文介绍如何在DataTable中实现合计功能,包括设置showFooter属性及supportSum属性的方法,并提及了如果需要自定义合计逻辑,可以在列的onRefresh方法中进行编写。

DataTable支持合计。
实现方法:
设置DataTable的showFooter属性为true。
设置要合计的列的supportSum属性为true。

若需要特别的合计方法,在该列的onRefresh方法里面写。

 

 


在 C# 中,如果你有个 `DataTable` 并希望**根据某字段进行排序**,由于 `DataTable` 本身不支持直接排序(如 `Sort()` 方法),你需要通过 `DataView` 来实现排序功能。 --- ### ✅ 推荐方法:使用 `DataView` 进行排序 ```csharp using System; using System.Data; // 假设你有DataTable DataTable dt = ds.Tables[0]; // 或你自己创建的表 // 创建 DataView 并设置排序 DataView dv = dt.DefaultView; dv.Sort = "TSS_PROCEDUREID ASC"; // 按 TSS_PROCEDUREID 升序排列 // 获取排序后的 DataTable DataTable sortedDt = dv.ToTable(); ``` --- ### 🔍 代码详解 | 部分 | 说明 | |------|------| | `dt.DefaultView` | 获取 DataTable 的默认视图,用于绑定和排序 | | `dv.Sort = "ColumnName ASC"` | 设置排序规则:`ASC` 升序,`DESC` 降序 | | `dv.ToTable()` | 将排序后的数据生成新的 DataTable | --- ### 🧪 示例:完整演示 ```csharp // 创建示例 DataTable DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); // 添加数据 dt.Rows.Add(3, "Alice", 25); dt.Rows.Add(1, "Bob", 30); dt.Rows.Add(2, "Charlie", 20); // 使用 DataView 排序:按 Age 升序 DataView dv = dt.DefaultView; dv.Sort = "Age ASC"; // 转回 DataTable DataTable sortedDt = dv.ToTable(); // 输出结果 foreach (DataRow row in sortedDt.Rows) { Console.WriteLine($"ID: {row["ID"]}, Name: {row["Name"]}, Age: {row["Age"]}"); } ``` ### ✅ 输出结果: ``` ID: 2, Name: Charlie, Age: 20 ID: 3, Name: Alice, Age: 25 ID: 1, Name: Bob, Age: 30 ``` --- ### 🔼 降序排序写法 ```csharp dv.Sort = "Age DESC"; // 从大到小 ``` --- ### ✅ 多列排序(复合排序) ```csharp dv.Sort = "Age ASC, Name DESC"; // 先按年龄升序,再按姓名降序 ``` --- ### ⚠️ 注意事项 - 列名必须存在,否则运行时报错; - 排序基于字符串比较规则(对数字类型会自动处理); - 如果列包含 `DBNull` 值,默认会被排在最前面(升序时); - `DataView` 不修改原表,而是返回个排序后的视图。 --- ### ❌ 错误做法(不要这样做) ```csharp // ❌ DataTable 没有 .Sort() 方法! dt.Sort = "Age ASC"; // 编译错误! ``` --- ### ✅ 扩展:LINQ 方式排序(另种选择) 你也可以使用 LINQ to DataSet 实现排序: ```csharp DataTable sortedDt = dt.AsEnumerable() .OrderBy(row => row.Field<int>("Age")) .CopyToDataTable(); // 降序: // .OrderByDescending(row => row.Field<int>("Age")) ``` > ✅ 优点:语法更灵活; > ⚠️ 注意:如果结果为空(无行),`CopyToDataTable()` 会抛异常。 --- ### ✅ 安全的 LINQ 排序(带空检查) ```csharp var query = dt.AsEnumerable() .OrderBy(row => row.Field<int>("Age")); DataTable sortedDt = query.Any() ? query.CopyToDataTable() : dt.Clone(); ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值