更改数据表格式

Posted

技术标签:

【中文标题】更改数据表格式【英文标题】:Change data table format 【发布时间】:2020-11-21 18:58:27 【问题描述】:

我有一个 System.Data.DataTable,按Sector 列升序排序,如下所示:

我不需要为每一行重复 Sector 值(第一列),但我只需要在第一次出现时将它写在一个空白行中,并且在该行下所有具有相同 Sector 但没有这个值,像这样

在 C# 中我该怎么做?

【问题讨论】:

这是一个 display 关注点,而不是数据表/Linq 关注点。这将是您正在使用的任何 DataGrid UI 组件的功能。检查组件的“分组”或“子表”文档。 “数据表”在不同的上下文中可能意味着很多东西。 “数据表”是什么意思?数据库中的表?一个 System.Data.DataTable? List<T> 代表一行数据的某个 T?某种充满数据的 UI 网格?还有什么? 这能回答你的问题吗? Group rows in DataGridView 【参考方案1】:

见下文:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication11

    class Program
    
        static void Main(string[] args)
        
            DataTable dt1 = new DataTable();
            dt1.Columns.Add("Sector", typeof(string));
            dt1.Columns.Add("IPC", typeof(long));
            dt1.Columns.Add("Analyst", typeof(string));
            dt1.Columns.Add("Issuer Group", typeof(string));
            dt1.Columns.Add("Senority", typeof(string));
            dt1.Columns.Add("Mkt Value", typeof(long));
            dt1.Columns.Add("Nom Value", typeof(long));
            dt1.Columns.Add("Issue Group", typeof(string));

            dt1.Rows.Add(new object[]  "Agencies", 180969, "MUSTO", "Caisse des Depots", "Senior", 10114481, 1000000, "AA");
            dt1.Rows.Add(new object[]  "Agencies", 180969, "MUSTO", "Caisse des Depots", "Senior", 10114481, 1000000, "AA" );
            dt1.Rows.Add(new object[]  "Agencies", 180969, "MUSTO", "Caisse des Depots", "Senior", 10114481, 1000000, "AA" );
            dt1.Rows.Add(new object[]  "Consumer", 180969, "MUSTO", "Caisse des Depots", "Senior", 10114481, 1000000, "AA" );
            dt1.Rows.Add(new object[]  "Energy", 180969, "MUSTO", "Caisse des Depots", "Senior", 10114481, 1000000, "AA" );
            dt1.Rows.Add(new object[]  "Energy", 180969, "MUSTO", "Caisse des Depots", "Senior", 10114481, 1000000, "AA" );

            DataTable dt2 = dt1.Clone();

            var groups = dt1.AsEnumerable().GroupBy(x => x.Field<string>("Sector")).ToList();

            foreach (var group in groups)
            
                long mktValue = group.Sum(x => x.Field<long>("Mkt Value"));
                long nomValue = group.Sum(x => x.Field<long>("Nom Value"));

                dt2.Rows.Add(new object[]  group.Key, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, mktValue, nomValue );
                foreach (DataRow row in group)
                
                    object[] data = row.ItemArray;
                    data[0] = DBNull.Value;
                    dt2.Rows.Add(data);
                 
            
        
    

【讨论】:

它也可能在“扇区”的行中包含属于该扇区的所有“Mkt Value”和“Nom Value”的总和。?像 Mkt Value 和 Nom Value 中的机构一样,拥有该部门的三行的总和?

以上是关于更改数据表格式的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL电子表格在更改完数据后关闭,却不提示保存对话框而直接关闭,再打开发现啥也没保存上,请问怎么办

更改奇怪数据框的格式

excel如何修改日期格式

QT Excel 插入、删除或者更改数据之后保存保存失败

如何为 Google 表格图表设置水平(或垂直)轴数字格式?

更改单元格编号格式时 Excel 表格填充颜色变为白色