C#中DataTable行转列示例
将下面表(1)格式的数据转换为表(2)格式的数据。很明显,这是一个行转列的要求,本想在数据库中行转列,因为在数据库中行转列是比较简单的,方法可以参考本站SQLServer中(行列转换)行转列及列转行且加平均值及汇总值,但因其它需求,最终需将该转化搬到C#中进行了。
(表1)
表(2)
不多说了,下面开始在DataTable行转列示例:
//DataTable行转列
private DataTable RCC(DataTable _outDataSource)
{
//从DataTable中读取不重复的日期行,用来构造新DataTable的列
DataTable distinct_date = _outDataSource.DefaultView.ToTable(true, "日期");
DataTable new_DataTable = new DataTable();
//将客户名称列添加到新表中
DataColumn new_d_col = new DataColumn();
new_d_col.ColumnName = "客户名称";
new_d_col.Caption = "";
new_DataTable.Columns.Add(new_d_col);
StringBuilder str_sum = new StringBuilder();
//开始在新表中构造日期列
foreach (DataRow dr in distinct_date.Rows)
{
new_d_col = new DataColumn();
new_d_col.DataType = typeof(decimal);
new_d_col.ColumnName = dr["日期"].ToString();
new_d_col.Caption = dr["日期"].ToString();
new_d_col.DefaultValue = 0;
new_DataTable.Columns.Add(new_d_col);
//这个的目的是为合计列构造expression
str_sum.Append("+[").Append("日期").Append("]");
}
//将合计列添加到新表中
new_d_col = new DataColumn();
new_d_col.DataType = typeof(decimal);
new_d_col.ColumnName = "Sum";
new_d_col.Caption = "合计";
new_d_col.DefaultValue = 0;
new_d_col.Expression = str_sum.ToString().substring(1);
new_DataTable.Columns.Add(new_d_col);
/*好了,到此新表已经构建完毕,下面开始为新表添加数据*/
//从原DataTable中读出不重复的客户名称,以客户名称为关键字来构造新表的行
DataTable distinct_object = _outDataSource.DefaultView.ToTable(true, "客户名称");
DataRow[] drs;
DataRow new_dr;
foreach (DataRow dr in distinct_object.Rows)
{
new_dr = new_DataTable.NewRow();
new_dr["客户名称"] = dr["客户名称"].ToString();
foreach (DataRow _dr in distinct_date.Rows)
{
drs = _outDataSource.Select("客户名称='" + dr["客户名称"].ToString() + "' and 日期='" + _dr["日期"].ToString() + "'");
if (drs.Length != 0)
{
new_dr[_dr["日期"].ToString()] = Math.Round(Convert.ToDecimal(drs[0]["金额"]), 2);
}
}
new_DataTable.Rows.Add(new_dr);
}
return new_DataTable;
}
从上面的代码中看到我们并没有为新表"合计"这一列赋值,这是因为该列具有表达式str_sum.Append("+[").Append("日期").Append("]"),所以这列的值是会自动填充的。
注意,在上面的表达式中,我们加了[],在DataTable的表达式中,如果列名是中文,一定要为列名加上[],要不然会报错的,这也是我调试了好久才发现的。
C#中DataTable行转列示例的更多相关文章
- sql中的行转列和列转行的问题
sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题 简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) G ...
- DataTable行转列
/// <summary> /// DataTable行转列 /// </summary> /// <param name="dtable">需 ...
- c# DataTable行转列
/// <summary> /// datatable行转列 /// </summary> /// <param name="dtSrc">来源 ...
- 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作
开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来, ...
- [google面试CTCI] 1-7.将矩阵中特定行、列置0
[字符串与数组] Q:Write an algorithm such that if an element in an MxN matrix is 0, its entire row and colu ...
- Sqlserver中PIVOT行转列透视操作
创建表: IF OBJECT_ID('T040_PRODUCT_SALES') IS NOT NULL DROP TABLE T040_PRODUCT_SALES create table T040_ ...
- mysql 中实现行变列
前言: mysql行列变化,最难的就是将多个列变成多行,使用的比较多的是统计学中行变列,列变行,没有找到现成的函数或者语句,所以自己写了存储过程,使用动态sql来实现,应用业务场景,用户每个月都有使用 ...
- 游标、获取本地本地多个文件、Excel数据导入、跨服务器数据拷贝、行转列示例
)='C:\Users\Administrator\Desktop\待处理数据\顺江学校4\' ---------------------------------------------------- ...
- 如何把excel中的行转为列?
步骤:选择复制要转行的内容--->新建一张表格---->右键选择性粘贴---->转置----->成功把行转为列(具体操作看下图) 选择复制这些内容
随机推荐
- Android 中Webview 自适应屏幕
随笔 - 478 文章 - 3 评论 - 113 Android 中Webview 自适应屏幕 webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomCon ...
- SpringMVC10数据验证
/** * @NotBlank 作用在String * @NotEmpty 作用在集合上 * @NotNull 作用在基本数据类型上 * */ public class User { @NotNull ...
- 使用top工具,找出消耗CPU 较多的进程
1.使用top工具,找出消耗CPU 较多的进程 [oracle@cuug ~]$ top top - 10:48:27 up 23:15, 4 users, load average: 1.09, ...
- EBS基础—表的后缀
1._ALL或无后缀:基表,所有对数据操作最终都是对基表的操作,表包含所有不同经营单位的信息,多组织环境. 2._B/_T:也是一种基表.一些数据和验证存储在此表中. 3._TL:语言的基表,TL表支 ...
- TalkingDataGame SDK在android Lua上的使用
千呼万唤使出来...终于开始更新lua版本的内容了,之前一直有这方面的计划,由于公司业务比较多,一直比较忙-见谅.. 费话不多说,直接上内容.. 整体来讲,先是先建议看一下之前关于cocos2dx上的 ...
- 优化HTTP前端请求构建高性能ASP.NET站点
HTTP请求的优化 在一个网页的请求过程中,其实整个页面的html结构(就是页面的那些html骨架)请求的时间是很短的,一般是占整个页面的请求时间的10%-20%.在页面加载的其余的时间实际上就是在 ...
- 使用wireshark抓本机之间的包(转)
所转地址:http://www.chinadmd.com/file/oc6evrwtzieitexvoupppisr_1.html 在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来 ...
- ubantu-命令-进入超级用户
sudo su; 建立文件夹 mkdir ulike_work;
- jquery cookies(2)用法实现
example $.cookie('name', ‘value'); 设置cookie的值,把name变量的值设为value example $.cookie('name', ‘value', {ex ...
- Sql 格式化工具
SQL Pretty Printer:目前提供4种使用方式,桌面版本,SSMS(SQL Server Management Studio)插件,VS插件,和提供API接口. SQL Pretty Pr ...