C#实现DataTable横表数据转换成纵表显示
时间: 2024-09-26 16:07:26 浏览: 58
C#实现DataTable转换成IList的方法
在C#中,DataTable是一种强类型的数据表格,主要用于存储和操作结构化的数据。将横表数据(即传统的二维表格形式,每一行代表一条记录,一列对应一个字段)转换成纵表显示,通常需要对数据进行排序、分组或者透视处理。这里我们可以使用LINQ查询和`GroupBy`方法来实现这种转换。
例如,假设我们有一个DataTable `dt`,想要按某个字段(如`Category`)进行分组并展示每个分类下的所有字段,可以这样做:
```csharp
using System.Data;
using System.Linq;
// 假设 dt 是你的 DataTable 实例
// 首先获取指定字段的唯一值列表
var categories = dt.AsEnumerable()
.Select(row => row.Field<string>("Category"))
.Distinct();
// 然后创建一个新的 DataTable 来存放结果
DataTable result = new DataTable();
result.Columns.Add("Category", typeof(string));
foreach (DataColumn column in dt.Columns)
{
if (!column.ColumnName.Equals("Category")) // 排除 Category 列
{
foreach (string category in categories)
{
// 对于每个类别,创建一行新的数据
var newRow = result.NewRow();
newRow["Category"] = category;
newRow[column.ColumnName] = string.Join(", ", dt.AsEnumerable()
.Where(r => r.Field<string>("Category") == category && r.Field<int>(column.ColumnName).ToString() != "") // 可选条件
.Select(r => r.Field<int>(column.ColumnName).ToString()));
result.Rows.Add(newRow);
}
}
}
// 结果就是按照 Category 分组,其他非 Category 列内容聚合在一起的纵表数据
```
阅读全文