数据源:
C#代码/// <summary>
/// 合并重复的跟踪号为一行
/// </summary>
/// <param name="dataTable">所有数据</param>
/// <returns>返回合并后的数据</returns>
public DataTable ReturnMergeData(DataTable dataTable)
{
if (dataTable.Rows.Count > 0)
{
//合并
System.Collections.Hashtable ht = new System.Collections.Hashtable();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
if (ht.ContainsKey(dataTable.Rows[i]["TraceID"]))
{
//获取行索引
int index = (int)ht[dataTable.Rows[i]["TraceID"]];
if (!dataTable.Rows[i]["LocationID"].ToString().Contains(dataTable.Rows[index]["LocationID"].ToString()))
{
//库位
dataTable.Rows[index]["LocationID"] = dataTable.Rows[index]["LocationID"] + "," + dataTable.Rows[i]["LocationID"];
}
if (!dataTable.Rows[i]["LotAtt09"].ToString().Contains(dataTable.Rows[index]["LotAtt09"].ToString()))
{
//工厂名称
dataTable.Rows[index]["LotAtt09"] = dataTable.Rows[index]["LotAtt09"] + "," + dataTable.Rows[i]["LotAtt09"];
}
if (!dataTable.Rows[i]["Lotatt04"].ToString().Contains(dataTable.Rows[index]["Lotatt04"].ToString()))
{
//品番
dataTable.Rows[index]["Lotatt04"] = dataTable.Rows[index]["Lotatt04"] + "," + dataTable.Rows[i]["Lotatt04"];
}
if (!dataTable.Rows[i]["Lotatt10"].ToString().Contains(dataTable.Rows[index]["Lotatt10"].ToString()))
{
//箱号
dataTable.Rows[index]["Lotatt10"] = dataTable.Rows[index]["Lotatt10"] + ";" + dataTable.Rows[i]["Lotatt10"];
}
//箱数
dataTable.Rows[index]["BoxNumber"] = dataTable.Rows[index]["BoxNumber"] + "+" + dataTable.Rows[i]["BoxNumber"];
if (!dataTable.Rows[i]["TraceID"].ToString().Contains(dataTable.Rows[index]["TraceID"].ToString()))
{
//跟踪号
dataTable.Rows[index]["TraceID"] = dataTable.Rows[index]["TraceID"] + "," + dataTable.Rows[i]["TraceID"];
}
if (!dataTable.Rows[i]["AddTime"].ToString().Contains(dataTable.Rows[index]["AddTime"].ToString()))
{
//入库日期
dataTable.Rows[index]["AddTime"] = dataTable.Rows[index]["AddTime"].ToString() + dataTable.Rows[i]["AddTime"].ToString();
}
if (!dataTable.Rows[i]["LotAtt05"].ToString().Contains(dataTable.Rows[index]["LotAtt05"].ToString()))
{
//产品等级
dataTable.Rows[index]["LotAtt05"] = dataTable.Rows[index]["LotAtt05"] + "," + dataTable.Rows[i]["LotAtt05"];
}
//删除重复行
dataTable.Rows.RemoveAt(i);
//调整索引减1
i--;
}
else
{
//保存名称以及行索引
ht.Add(dataTable.Rows[i]["TraceID"], i);
}
}
}
return dataTable;
}
合并的后结果:
另外一种方法:所有的合并
public DataTable dttest(DataTable dt)
{
DataTable tabTemp = new DataTable();
if (dt.Rows.Count > 0)
{
string row1 = dt.Rows[0][7].ToString();//取表的第一行第一列
DataRow[] drr = dt.Select("","TraceID");
DataRow drTemp = tabTemp.NewRow();//临时新的行
//追加列名
for (int j = 0; j < dt.Columns.Count; j++)
{
tabTemp.Columns.Add(dt.Columns[j].ColumnName, dt.Columns[j].DataType);
}
foreach (DataRow row in drr)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
if (i != 0)
{
drTemp[i] = drTemp[i].ToString() + row[i].ToString();//合并每一列的数据
}
else
{
drTemp[i] = row[i].ToString();//添加第一列,不需要相加
}
}
dt.Rows.Remove(row);//清除此类的行
}
tabTemp.Rows.Add(drTemp);//添加临时新的行数据
}
return tabTemp;
}
ps:
参考
http://www.chinahtml.com/0608/csharp-11545708005479.html
http://biancheng.dnbcw.info/net/75809.html
http://q.cnblogs.com/q/15136/
datatable 过滤重复 行
http://www.cnblogs.com/advocate/archive/2010/07/27/1786095.html
http://blog.sina.com.cn/s/blog_59d78c8f0100kk2v.html
http://blog.csdn.net/bingtingabc/article/details/6338530