Довольно запутанный вопрос;DataSets, DataTables и электронные таблицы - это разные вещи.Является ли loadUniqueProducts
таблица Data
из вашей электронной таблицы?Это DataTable, а не DataSet.
Таблицы упорядочены и содержат пустые строки и больше похожи на массив C #, чем на DataTable;В DataTables не должно быть пустых строк.
rowid
- это действительно плохое имя для DataColumn, обычно оно используется для ссылки на последовательный идентификатор строки из базы данных.prodcode
нигде не описан, это число после ваших данных «ПРОДУКТА»?
Почему вы добавляете 14 пустых строк?Вы должны только добавить строки, которые имеют данные в DataTable.Затем вы делаете это снова для каждой строки в loadUniqueProducts
.Массивное дублирование данных.
Я предполагаю, что вам нужно пройтись по каждой строке в loadUniqueProducts
и найти соответствующую строку в MainTable
.Если эта строка еще не существует, создайте ее.Затем выясните, для какого столбца MainTable у значений «uniqueProducts» есть значения, и скопируйте их.Это звучит правильно?
Вот пример кода, который делает это для Total Sales (RowID = 1).Я не делал этого для Stock на полках или любых других столбцов, но это должно дать вам идею:
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>
, но это должно помочь вам начать.