C# 把DataTable dt1,DataTable dt2,DataTable dt3,Datatable dt4里面相同的序列号的相关的数据用代码提取出来组成一行,一行一行组合,组成一个新的表,然后再和界面显示控件绑定
时间: 2023-12-17 13:02:33 浏览: 25
你可以使用 LINQ 来实现这个功能。假设每个 DataTable 都有一个名为 "序列号" 的列,可以按照以下步骤操作:
1. 使用 `Join` 方法将具有相同序列号的行连接在一起。例如,连接 dt1 和 dt2 中的行:
```
var joined = from row1 in dt1.AsEnumerable()
join row2 in dt2.AsEnumerable()
on row1.Field<int>("序列号") equals row2.Field<int>("序列号")
select new { Row1 = row1, Row2 = row2 };
```
这将返回一个包含两个表中相同序列号的行的集合。
2. 使用 `Join` 方法将连接后的结果与另一个 DataTable 进行连接。例如,连接已连接的结果与 dt3:
```
var joinedAgain = from j in joined
join row3 in dt3.AsEnumerable()
on j.Row1.Field<int>("序列号") equals row3.Field<int>("序列号")
select new { j.Row1, j.Row2, Row3 = row3 };
```
这将返回一个包含三个表中相同序列号的行的集合。
3. 重复上述步骤,直到连接所有 DataTable。
4. 使用 `Select` 方法将结果转换为一个新的 DataTable:
```
DataTable result = new DataTable();
result.Columns.Add("序列号", typeof(int));
// 添加其他列
foreach (var row in joinedFinal)
{
DataRow newRow = result.NewRow();
newRow["序列号"] = row.Row1.Field<int>("序列号");
// 设置其他列的值
result.Rows.Add(newRow);
}
```
5. 将 DataTable 绑定到界面显示控件。
完整代码示例:
```
var joined = from row1 in dt1.AsEnumerable()
join row2 in dt2.AsEnumerable()
on row1.Field<int>("序列号") equals row2.Field<int>("序列号")
select new { Row1 = row1, Row2 = row2 };
var joinedAgain = from j in joined
join row3 in dt3.AsEnumerable()
on j.Row1.Field<int>("序列号") equals row3.Field<int>("序列号")
select new { j.Row1, j.Row2, Row3 = row3 };
var joinedFinal = from j in joinedAgain
join row4 in dt4.AsEnumerable()
on j.Row1.Field<int>("序列号") equals row4.Field<int>("序列号")
select new { j.Row1, j.Row2, j.Row3, Row4 = row4 };
DataTable result = new DataTable();
result.Columns.Add("序列号", typeof(int));
// 添加其他列
foreach (var row in joinedFinal)
{
DataRow newRow = result.NewRow();
newRow["序列号"] = row.Row1.Field<int>("序列号");
// 设置其他列的值
result.Rows.Add(newRow);
}
dataGridView1.DataSource = result;
```