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