Вставка набора данных в таблицу данных - PullRequest
0 голосов
/ 20 января 2011

Я застрял на данный момент с проблемой ниже.Я постараюсь объяснить это как можно лучше, но дайте мне знать, если вам нужно больше разъяснений.Я поместил некоторые вещи в электронную таблицу Google, чтобы помочь с объяснением, ссылка ниже.

https://spreadsheets.google.com/ccc?key=0An70K3Q_IiWAdGpfV2YzNFQ4aTYxTWIxSUd5azVMWEE&hl=en&authkey=CMO898QP

Электронная таблица:
MainTable = C # Application DataTable
Data = SQLРезультаты запроса SQL (набор данных)

Таблицу данных необходимо перевести / преобразовать в формат, указанный в электронной таблице MainTable.

Каждый идентификатор строки присутствует, поскольку он связан с чем-то уникальным.Так например.Если мы предположим, что rowid 1 для «Всего продаж за этот месяц», вы увидите в электронной таблице данных, что ячейка C2 должна перейти в ячейку E2 электронной таблицы MainTable.

Если мы предположим, что rowid 2 предназначен для »«запас на полке», вы можете увидеть в электронной таблице данных, что ячейка D3 должна перейти в ячейку F3 электронной таблицы MainTable.

... и т. д.Сначала я подошел к нему с приведенным ниже кодом, но это не сработает, потому что этот код не уникален в моем наборе данных.Я бы создал другой набор данных или список, но тогда я не уверен, куда идти дальше.Я неправильно смотрю на это?

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);
            }
        }

Спасибо за помощь.

1 Ответ

0 голосов
/ 20 января 2011

Довольно запутанный вопрос;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>, но это должно помочь вам начать.

...