Изменить формат таблицы данных - PullRequest
0 голосов
/ 01 августа 2020

У меня есть System.Data.DataTable, отсортированный в возрастающем порядке по столбцу Sector вот так:

enter image description here

I dont need to repeat for each row the Sector value (first column) but i need to write it in a blank row only at the first occurrence and under that all the rows with the same Sector but without this value, like this

введите описание изображения здесь

Как сделать в C#?

1 Ответ

0 голосов
/ 01 августа 2020

См. Ниже:

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);
                 }
            }
        }
    }
}
...