仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 799|回复: 7
打印 上一主题 下一主题

[学习教程] 来一篇关于NET的C#中DataTable行转列示例

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:20:29 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。明天碰着一个需求,就是将上面表(1)格局的数据转换为表(2)格局的数据。很分明,这是一个行转列的请求,本想在数据库中行转列,由于在数据库中行转列是对照复杂的,办法能够参考本站SQLServer中(行列转换)行转列及列转行且加均匀值及汇总值,但因别的需求,终极需将该转化搬到C#中举行了。
客户称号日期金额A客户1月1000B客户2月1000C客户3月2000C客户4月2500
(表1)
客户称号1月2月3月4月算计A客户10000001000B客户01000001000C客户00200025004500
表(2)未几说了,上面入手下手在DataTable行转列示例:
//DataTable行转列
privateDataTableRCC(DataTable_outDataSource)
{
//从DataTable中读取不反复的日期行,用来机关新DataTable的列
DataTabledistinct_date=_outDataSource.DefaultView.ToTable(true,"日期");

DataTablenew_DataTable=newDataTable();

//将客户称号列增加到新表中
DataColumnnew_d_col=newDataColumn();
new_d_col.ColumnName="客户称号";
new_d_col.Caption="";
new_DataTable.Columns.Add(new_d_col);

StringBuilderstr_sum=newStringBuilder();

//入手下手在新表中机关日期列
foreach(DataRowdrindistinct_date.Rows)
{
new_d_col=newDataColumn();
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=newDataColumn();
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中读出不反复的客户称号,以客户称号为关头字来机关新表的行
DataTabledistinct_object=_outDataSource.DefaultView.ToTable(true,"客户称号");
DataRow[]drs;
DataRownew_dr;
foreach(DataRowdrindistinct_object.Rows)
{
new_dr=new_DataTable.NewRow();
new_dr["客户称号"]=dr["客户称号"].ToString();

foreach(DataRow_drindistinct_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);
}

returnnew_DataTable;
}


从下面的代码中看到我们并没无为新表"算计"这一列赋值,这是由于该列具有表达式str_sum.Append("+[").Append("日期").Append("]"),以是这列的值是会主动添补的。

注重,在下面的表达式中,我们加了[],在DataTable的表达式中,假如列名是中文,必定要为列名加上[],要否则会报错的,这也是我调试了很久才发明的。有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。
飘飘悠悠 该用户已被删除
沙发
 楼主| 发表于 2015-3-1 15:10:28 | 显示全部楼层
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-11 21:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表