c# - 从 DataTable 创建数据透视表

标签 c# winforms datatable pivot pivot-table

我正在使用 C# winforms 创建一个需要将数据表转换为数据透视表的应用程序。我的数据透视表从 SQL 端运行良好,但从数据表创建它似乎更棘手。为此,我似乎找不到任何内置到 .NET 中的东西。

注意:我必须从 .NET 端执行此操作,因为我在创建数据透视表之前操作数据。

我已经阅读了一些与此类似的文章,但我很难将它们应用到我的问题中。

*我有一个包含“StartDateTime”、“Tap”和“Data”列的数据表。应将开始日期组合在一起并对数据值进行平均(有时每个开始日期有多个数据值)。表格如下:

enter image description here

数据透视表的输出应如下图所示(但不是四舍五入的值)。列号是不同的抽头号(每个唯一的一个)。

Pivot Table

我怎样才能从数据表创建这个数据透视表?

编辑:忘记提及,这些抽 header value 并不总是从 1 到 4,它们在数量和值上确实有所不同。

最佳答案

学习哈希轴手筋:

var inDT = new DataTable();
// Fill the input table

var oDT = new DataTable();
var dfq = new Dictionary<DateTime, DataRow>;
oDT.Columns.Add("StartDateTime", typeof(DateTime));
for (int i = 0; i < inDT.Rows.Count; i++) {
    var key = (DateTime)inDT.Rows[i][0];
    var row = (String)inDT.Rows[i][2];
    var data = (Double)inDT.Rows[i][1];

    if (!oDT.Columns.Contains(row)) {
       oDT.Columns.Add(row);
    }
    if (dfq.ContainsKey(key)) {
        dfq[key][row] = data;
    } else {
        var oRow = oDT.NewRow();
        oRow[0] = key;
        oRow[row] = data;
        dfq.Add(key, oRow);
        oDT.Rows.Add(oRow);
    }
}
// pivot table in oDT

关于c# - 从 DataTable 创建数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981120/

相关文章:

c# - 此 SQL 语句的等效 LINQ to SQL 查询表达式是什么?

c# - 截断查询字符串并返回干净的 URL C# ASP.net

c# - 在 LINQ 查询中使用动态数据类型

c# - 在数据集中使用多个数据表

c# - 高效的数据表分组依据

C# Regex 替换样式 HEIGHT 标签

c# - unity “Can not play a disabled audio source”

.net - 将所选行从 DataGridView 复制到另一个,包括图像列

c# - 单击以打开项目(指向选择)

c# - 将图像从 Bitmap 以 png 格式上传到服务器