DataTable进行多字段相同的数据合并,如何实现?

fxcjy 2014-01-27 05:43:51
我有一个DataTable,如何将“楼层”列、“编号1”、“编号2”、“编号3”、“编号4”这4列信息都相同的“名称”一列内容合并。

例如原数据:
楼层 名称 编号1 编号2 编号3 编号4
一层 名称1 H1 G5 K4 F8
一层 名称2 H2 G2 K2 F2
一层 名称3 H1 G5 K4 F8
一层 名称4 H1 G5 K4 F8
二层 名称1 H1 G5 K4 F8
二层 名称2 H3 G3 K3 F3
二层 名称5 H1 G5 K4 F8

希望处理后得到的数据如下:
楼层 名称 编号1 编号2 编号3 编号4
一层 名称1、名称3、名称4 H1 G5 K4 F8
一层 名称2 H2 G2 K2 F2
二层 名称1、名称5 H1 G5 K4 F8
二层 名称2 H3 G3 K3 F3


用C#如何实现呢?求各位高手帮助。感谢
...全文
1616 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxcjy 2014-01-27
  • 打赏
  • 举报
回复
非常给力,多谢,经测试达到要求,先结贴,明天再仔细研究一下方法。
md5e 2014-01-27
  • 打赏
  • 举报
回复
DataTable dt = new DataTable();
dt.Columns.Add("楼层", typeof(string));
dt.Columns.Add("名称", typeof(string));
dt.Columns.Add("编号1", typeof(string));
dt.Columns.Add("编号2", typeof(string));
dt.Columns.Add("编号3", typeof(string));
dt.Columns.Add("编号4", typeof(string));
dt.Rows.Add(new object[] { "一层", "名称1", "H1", "G5", "K4", "F8" });
dt.Rows.Add(new object[] { "一层", "名称2", "H2", "G2", "K2", "F2" });
dt.Rows.Add(new object[] { "一层", "名称3", "H1", "G5", "K4", "F8" });

DataTable dt2=dt.Clone();
dt2.PrimaryKey = new DataColumn[] { dt2.Columns["楼层"], dt2.Columns["编号1"], dt2.Columns["编号2"], dt2.Columns["编号3"], dt2.Columns["编号4"] };

foreach (DataRow row in dt.Rows)
{
DataRow srow = dt2.Rows.Find(new object[] { row["楼层"].ToString(), row["编号1"], row["编号2"], row["编号3"], row["编号4"] });
if (srow == null)
{
dt2.Rows.Add(row.ItemArray);
}
else
{
srow["名称"] = srow["名称"].ToString() + "," + row["名称"].ToString();
}
}

GridView1.DataSource = dt2;
GridView1.DataBind();

fxcjy 2014-01-27
  • 打赏
  • 举报
回复
需要根据多个相同的列数据判断,如果它们都相同,那就将“名称”一列的内容进行组合合并,这样减少数据项的重复,出发点是这样的。
fxcjy 2014-01-27
  • 打赏
  • 举报
回复
是呀,我刚正在看你给我发的代码,感觉实现不了呀。
md5e 2014-01-27
  • 打赏
  • 举报
回复
好像不对,你是要数据合并
md5e 2014-01-27
  • 打赏
  • 举报
回复
protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName,bool isMergeAll) { //合并列 DataTable ndt1 = dt1.Copy(); DataTable ndt2 = dt2.Copy(); ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] }; for (int i = 0; i < ndt2.Columns.Count; i++) { if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim()) { ndt1.Columns.Add(ndt2.Columns[i].ColumnName); } } //合并相同主键的数据 for (int i = 0; i < ndt1.Rows.Count; i++) { DataRow inrow = ndt2.Rows.Find(ndt1.Rows[i][KeyColName]); if (inrow != null) { for (int j = 0; j < ndt2.Columns.Count; j++) { if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim()) { ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName]; } } if (isMergeAll) { ndt2.Rows.Remove(inrow); } } } if (isMergeAll) { //合并不同主键的数据 for (int i = 0; i < ndt2.Rows.Count; i++) { DataRow row = ndt1.NewRow(); for (int j = 0; j < ndt2.Columns.Count; j++) { row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName]; } ndt1.Rows.Add(row); } } return ndt1; }

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧