3个DataTable,分别为A,B,C,将A、B和C合成一个新的DataTable(D),存在A表中的内容(数据)作为D表的表头,B和C中有的需要将表头合到D中,有的需要将内容和到D中。
1、先获得3个表;2、获得新表的表头;3、将A、B或C中存在唯一共同id的记录插入到D表;4、根据新表内容的ID和A、B或C表中的ID进行配对,配对上就进行更新。
注意:A、B和C需存在一个共同的字段
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EvaluationSystem.DAL;
using System.Data;
namespace EvaluationSystem.BLL
{
public class TownResultsTotalBLL
{
//定义D层变量
private TownResultsTotalDAL townResultsTotalDAL = new TownResultsTotalDAL();
//定义返回表
public DataTable dtN = new DataTable();
//获得定量等
public DataTable dtQ = new DataTable();
//获得定性
public DataTable dtS = new DataTable();
//获得定性名称
public DataTable dtSI = new DataTable();
#region 获得所有的年份
/// <summary>
/// 返回所有的年份
/// </summary>
/// <returns></returns>
public DataSet GetYears(){
return townResultsTotalDAL.GetYears();
}
#endregion
#region 获得所有的级别
/// <summary>
/// 获得所有的级别
/// </summary>
/// <returns></returns>
public DataSet GetLevels() {
return townResultsTotalDAL.GetLevels();
}
#endregion
#region 获得整个新表
/// <summary>
/// 多个表合并在一起
/// </summary>
/// <param name="strYear"></param>
/// <returns></returns>
public DataSet GetNewTableAll(string strYear, string strLevel = "")
{
//1、新表头
dtN = GetNewTableHead(strYear, strLevel);
//2、添加定量(添加定量总分,附加总分,总得分和排名)
AddQulityResult();
//3、更新定性(将所有的定性指标总分更新)
AddSexResult();
DataSet ds = new DataSet();
ds.Tables.Add(dtN);
//返回表
return ds;
}
#endregion
#region 获得新表的表头
/// <summary>
/// 获得新表的表头
/// </summary>
/// <param name="strYear"></param>
/// <returns></returns>
public DataTable GetNewTableHead(string strYear, string strLevel = "")
{
if (string.IsNullOrEmpty(strYear))
{
strYear = DateTime.Today.Year.ToString();
}
if (string.IsNullOrEmpty(strLevel))
{
strLevel = "";
}
//1、定性分数表(每个干部的每个定性成绩)
dtS = townResultsTotalDAL.GetSexResults(strYear);
//2、定性描述表(某年,所有定性指标)
dtSI = townResultsTotalDAL.GetSexInfo(strYear);
//3、定量和附加分数表(总成绩,附加总成绩,总的成绩,总排名)
dtQ = townResultsTotalDAL.GetQulityAndAddResults(strYear, strLevel);
//获得新表的表头
GetHeadName();
return dtN;
}
#endregion
#region 拼接新表
#region 私有方法:1、拼接新表头(总排名,定量权重总分,附加分,每个定性名称等)
/// <summary>
/// 获得新表的字段值
/// </summary>
public void GetHeadName()
{//干部ID,总排名,干部姓名,定量总得分,奖惩总得分,总得分,年份
//添加新表的表头
dtN.Columns.Add(new DataColumn(dtQ.Columns[0].ColumnName.ToString(), typeof(string)));
dtN.Columns.Add(new DataColumn(dtQ.Columns[1].ColumnName.ToString(), typeof(string)));
dtN.Columns.Add(new DataColumn(dtQ.Columns[2].ColumnName.ToString(), typeof(string)));
dtN.Columns.Add(new DataColumn(dtQ.Columns[3].ColumnName.ToString(), typeof(string)));
//定性指标的名称
for (int i = 0; i < dtSI.Rows.Count; i++)
{
dtN.Columns.Add(new DataColumn(dtSI.Rows[i]["定性指标名称"].ToString(), typeof(string)));
}
dtN.Columns.Add(new DataColumn(dtQ.Columns[4].ColumnName.ToString(), typeof(string)));
dtN.Columns.Add(new DataColumn(dtQ.Columns[5].ColumnName.ToString(), typeof(string)));
dtN.Columns.Add(new DataColumn(dtQ.Columns[6].ColumnName.ToString(), typeof(string)));
dtN.Columns.Add(new DataColumn(dtQ.Columns[7].ColumnName.ToString(), typeof(string)));
}
#endregion
#region 私有方法:2、添加内容(定量总分,附加总分,总得分和总排名)
/// <summary>
/// 向dtN中先添加定量总分,附加总分和总得分和排名
/// </summary>
private void AddQulityResult()
{
//添加定量值
for (int i = 0; i < dtQ.Rows.Count; i++)
{
//创建一个row对象
DataRow drAdd = dtN.NewRow();
for (int j = 0; j < dtQ.Columns.Count; j++)
{
drAdd[dtQ.Columns[j].ColumnName.ToString()] = dtQ.Rows[i][j].ToString();
}
//将一整条数据写入表中
dtN.Rows.Add(drAdd);
}
}
#endregion
#region 私有方法:3、更新内容(将每个定性权重分数更新到新表里)
/// <summary>
/// 将所有的定性指标总分更新
/// </summary>
private void AddSexResult()
{
for (int i = 0; i < dtN.Rows.Count; i++)
{//dtN中选择一条记录
int j = 0;
string strF = dtN.Rows[i][0].ToString();
while (j < dtS.Rows.Count)
{
string strS = dtS.Rows[j][0].ToString();
if (strF == strS)
{
string name = dtS.Rows[j]["指标名称"].ToString();
dtN.Rows[i][name] = dtS.Rows[j]["定性权重得分"];
}
j++;
}
}
}
#endregion
#endregion
}
}
这个是多DataTable和为一个DataTabler的核心代码,如果有兴趣的话,可以实现拼接Table,动态改变Web页面的Table显示,方法有多种,例如:可以根据ASP.net生成页面的机制实现;也可以通过客户端js实现。这里需要注意的是,如果使用的是EasyUI的Table控件的话,最好使用第一种方法(已实现),第二种方法目前本人没有实现。
原文:http://blog.csdn.net/jiben2qingshan/article/details/18521937