C# 把DataTable dt1,DataTable dt2,DataTable dt3,Datatable dt4里面相同的序列号的相关的数据用代码提取出来组成一行,一行一行组合,组成一个新的表,然后再和界面显示控件绑定
时间: 2023-12-17 11:02:42 浏览: 148
你可以使用 LINQ 来完成这个操作。我们可以使用 `Join` 方法将多个 `DataTable` 连接在一起,并且使用 `GroupBy` 方法将它们分组。最后,我们可以使用 `Select` 方法将它们转换成一个新的 `DataTable`。
以下是示例代码:
```csharp
// 将所有 DataTable 连接在一起
var result = dt1.AsEnumerable().Union(dt2.AsEnumerable())
.Union(dt3.AsEnumerable()).Union(dt4.AsEnumerable())
// 根据序列号分组
.GroupBy(row => row.Field<int>("序列号"))
// 将每组中的行合并成一个新的行
.Select(group => group.Aggregate(new DataRowBuilder(), (builder, row) =>
{
foreach (DataColumn col in row.Table.Columns)
{
builder[col.ColumnName] = row[col.ColumnName];
}
return builder;
}).ToDataRow())
.CopyToDataTable();
// 将新的 DataTable 绑定到界面显示控件
yourControl.DataSource = result;
```
注意,`DataRowBuilder` 是一个自定义的类,用于将多个 `DataRow` 合并成一个新的 `DataRow`。以下是完整的代码:
```csharp
public class DataRowBuilder
{
private readonly Dictionary<string, object> _values = new Dictionary<string, object>();
public object this[string columnName]
{
get => _values.TryGetValue(columnName, out var value) ? value : null;
set => _values[columnName] = value;
}
public DataRow ToDataRow()
{
var row = new DataTable().NewRow();
foreach (var kvp in _values)
{
row[kvp.Key] = kvp.Value;
}
return row;
}
}
```
阅读全文