Went out and cut the grass, weedwhack etc. and it came to me. Sometimes it's good to take a little break.:
public DataTable getBomTable2()
{
int maxrows = 0;
DataTable returnDT = new DataTable();
List<string> tableNames = new List<string>();
//Loop through each datatable and find the greatest
//possible row count.
foreach (DataTable tdt in this.tempDS.Tables)
{
if (tdt.Rows.Count > maxrows)
{
maxrows = tdt.Rows.Count;
}
}
//Loop Through each datatable and collect tablenames.
foreach (DataTable tdt in this.tempDS.Tables)
{
tableNames.Add(tdt.TableName);
}
#region DataColumnAdd
//Add the BOM columns in reverse order.
for (int i=0; i < tableNames.Count; i++)
{
DataColumn dc = new DataColumn();
dc.DataType = typeof(string);
dc.ColumnName = tableNames[(tableNames.Count-1) - i].ToString();
returnDT.Columns.Add(dc);
}
//Add all the other DataColumns
DataColumn catalogCol = new DataColumn();
catalogCol.DataType = typeof(string);
catalogCol.ColumnName = "catalogno";
returnDT.Columns.Add(catalogCol);
DataColumn partNoCol = new DataColumn();
partNoCol.DataType = typeof(string);
partNoCol.ColumnName = "partno";
returnDT.Columns.Add(partNoCol);
DataColumn descCol = new DataColumn();
descCol.DataType = typeof(string);
descCol.ColumnName = "description";
returnDT.Columns.Add(descCol);
DataColumn lenCol = new DataColumn();
lenCol.DataType = typeof(string);
lenCol.ColumnName = "blength";
returnDT.Columns.Add(lenCol);
DataColumn widCol = new DataColumn();
widCol.DataType = typeof(string);
widCol.ColumnName = "bwidth";
returnDT.Columns.Add(widCol);
DataColumn remCol = new DataColumn();
remCol.DataType = typeof(string);
remCol.ColumnName = "remark";
returnDT.Columns.Add(remCol);
DataColumn refCol = new DataColumn();
refCol.DataType = typeof(string);
refCol.ColumnName = "ksp";
returnDT.Columns.Add(refCol);
#endregion
returnDT.AcceptChanges();
//Combine all datatables.
foreach (DataTable tdt in this.tempDS.Tables)
{
bool found = false;
foreach (DataRow dr in tdt.Rows)
{
found = false;
foreach (DataRow rdr in returnDT.Rows)
{
if (dr["catalogno"] == rdr["catalogno"] & dr["blength"] == rdr["blength"] & dr["bwidth"] == rdr["bwidth"])
{
found = true;
rdr[tdt.TableName] = dr["qty"].ToString();
}
}
if (found == false)
{
DataRow ndr = returnDT.NewRow();
ndr[tdt.TableName.ToString()] = dr["qty"].ToString();
ndr["catalogno"] = dr["catalogno"].ToString();
ndr["partno"] = dr["partno"].ToString();
ndr["description"] = dr["description"].ToString();
ndr["blength"] = dr["blength"].ToString();
ndr["bwidth"] = dr["bwidth"].ToString();
ndr["remark"] = dr["remark"].ToString();
ndr["ksp"] = dr["ksp"].ToString();
returnDT.Rows.Add(ndr);
found = true;
}
}
}
DataView obDataView = new DataView(returnDT);
obDataView.Sort = "partno ASC";
return this.CreateTable(obDataView);
}