我现在陷入了下面的问题。我会尽力解释它,但如果你需要更多澄清,请告诉我。我在google电子表格中添加了一些内容以帮助解释,链接如下。
电子表格:
MainTable = C#Application DataTable
Data = SQL查询(数据集)中的SQL结果
需要将数据电子表格翻译/转换为MainTable电子表格中指定的格式。
每个rowid都在那里,因为它们与独特的东西有关。所以举个例子。如果我们假设rowid 1是“本月的总销售额”,您可以在数据电子表格中看到,单元格C2需要转到MainTable电子表格上的单元格E2。
如果我们假设rowid 2用于“货架上的库存”,您可以在数据电子表格中看到,单元格D3需要转到MainTable电子表格上的单元格F3。
......等等。我首先使用下面的代码来处理它,但这不会起作用,因为prodcode在我的数据集中不是唯一的。我会创建另一个数据集或列表,但后来我不确定从那里去哪里。我看错了吗?
foreach (DataRow dsrow in dsproduct.Tables["loadUniqueProducts"].Rows)
{
string prodcode = Convert.ToString(dsrow["prodcode"]);
for (int i = 1; i <= 14; i++)
{
row = table.NewRow();
row["rowid"] = i;
row["prodcode"] = prodcode;
table.Rows.Add(row);
}
}
感谢您的帮助。
答案 0 :(得分:0)
相当令人困惑的问题; DataSet,DataTable和电子表格都是不同的东西。您的电子表格中的loadUniqueProducts
表格是Data
吗?这是一个DataTable,而不是DataSet。
电子表格是有序的并且有空行,并且与数据表格相比更类似于C#数组; DataTables不应该有空行。
rowid
是一个非常糟糕的DataColumn名称,它通常用于引用数据库中的顺序行ID。 prodcode
没有在任何地方描述,是您的“PRODUCT”数据之后的数字吗?
为什么要添加14个空白行?您应该只将具有数据的行添加到DataTable。然后,对loadUniqueProducts
中的每一行再次执行此操作。大量重复数据。
我假设您想要做的是逐步浏览loadUniqueProducts
中的每一行,并在MainTable
中找到匹配的行。如果此行尚不存在,请创建它。然后找出“uniqueProducts”具有值的MainTable列,并复制它们。听起来不错吗?
以下是针对Total Sales(RowID = 1)执行此操作的示例代码。我没有为Stock on Shelves或任何其他专栏做过这个,但这应该给你一个想法:
foreach (DataRow r in dsproduct.Tables["loadUniqueProducts"].Rows)
{
int productID = r.Field<System.Int32>("ProductID");
string productExpression = "ProductID=" + productID.ToString();
string salesExpression = productExpression + " AND RowID=1";
int? monthSales = r.Field<System.Int32?>("MonthSales");
if ((monthSales.HasValue) && (monthSales.Value > 0))
{
DataTable destTable= dsproduct.Tables["MainTable"];
DataRow[] selectedRows = destTable.Select(salesExpression);
DataRow destRow;
if (selectedRows.Length > 1)
throw new Exception(String.Format("MainTable has ProductID {0} duplicate Sales RowID 1.", productID));
else if (selectedRows.Length == 1)
destRow = selectedRows[0];
else
{
destRow = destTable.NewRow();
destRow.SetField<System.Int32>("RowID", 1);
destRow.SetField<System.Int32>("ProductID", productID);
destTable.Rows.Add(destRow);
}
string locColumn = "Loc" + r.Field<System.Char>("Loc");
destRow.SetField<System.Int32>(locColumn, monthSales.Value);
}
这应该被修复以避免在运行时创建列名,并且创建强命名的DataTables将摆脱<System.Int32>
的东西,但这应该让你开始。