原有BOM存储在DATATABLE中
时间: 2024-10-17 21:09:39 浏览: 13
C# 将DataTable存储到DBF文件中
如果原有BOM数据存储在一个.NET Framework的DataTable中,我们需要稍微调整上面的方法来适应这种格式。首先,假设DataTable有以下几个列:TopLevelCode(母件编码),SubitemCode(子件编码),Quantity(子件用量),以及可能存在的其他列(如层级、物料编码等)。
```csharp
using System.Data;
public void ConvertBOMFromDataTable(DataTable bomDataTable)
{
DataTable hierarchicalBOM = new DataTable("HierarchicalBOM"); // 新建一个DataTable用于存储转换后的BOM
// 创建一个新的DataColumn列表,对应转换后的新结构
var columns = new DataColumn[] {
new DataColumn("BOM层级", typeof(int)),
new DataColumn("物料编码", typeof(string)),
new DataColumn("子件用途", typeof(string))};
hierarchicalBOM.Columns.AddRange(columns);
// 遍历原BOM DataTable
foreach (DataRow row in bomDataTable.Rows)
{
int hierarchyLevel = 1;
string topLevelCode = row["TopLevelCode"].ToString();
string subitemCode = row["SubitemCode"].ToString();
// 检查当前层级是否已存在
bool isFound = false;
foreach (DataRow newRow in hierarchicalBOM.Rows)
{
if (newRow["TopLevelCode"].ToString() == topLevelCode)
{
isFound = true;
break;
}
}
if (!isFound)
{
hierarchicalBOM.Rows.Add(1, topLevelCode, subitemCode); // 添加新的顶层行
}
else
{
hierarchyLevel = Convert.ToInt32(newRow["BOM层级"]) + 1;
newRow["BOM层级"] = hierarchyLevel;
newRow["物料编码"] = subitemCode;
newRow["子件用途"] = GetSubitemPurpose(row); // 假设GetSubitemPurpose是一个获取子件用途的方法
}
}
// 输出转换后的BOM到另一个DataTable或者文件
DisplayHierarchicalBOM(hierarchicalBOM);
}
private void DisplayHierarchicalBOM(DataTable hierarchicalBOM)
{
// ...此处可以添加显示或保存数据的方法...
}
// 假设你需要从原BOM中提取子件用途,可以创建这样一个辅助函数
private string GetSubitemPurpose(DataRow originalRow)
{
// 这里根据originalRow获取子件用途,实际情况可能依赖于原始DataTable的结构
// 真实情况可能会更复杂,例如通过关联查询或其他数据库操作
return "子件用途"; // 这里仅作演示,假设总是返回同样的值
}
阅读全文