2011-01-20 60 views
0

我被困在當下,下面的問題。我會盡我所能盡力解釋它,但請告訴我是否需要更多解釋。我已經在Google電子表格中添加了一些內容以幫助解釋,請參閱下面的鏈接。將數據集插入DataTable

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

電子表格:
MainTable = C#的應用數據表
數據= 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

相當令人困惑的問題; DataSets,DataTables和電子表格都是不同的東西。 loadUniqueProducts您的電子表格中的Data表格?這是一個DataTable,而不是一個DataSet。

電子表格是有序的,有空行,並且比DataTable更類似於C#數組;數據表不應該有空行。

rowid對於DataColumn來說是一個非常糟糕的名字,它通常用於引用數據庫中的順序行ID。 prodcode不在任何地方描述,是您的「PRODUCT」數據之後的數字?

爲什麼要添加14個空行?您只應將具有數據的行添加到DataTable。然後你再次爲loadUniqueProducts中的每一行執行此操作。大量重複數據。

我假設你想要做的是逐行瀏覽loadUniqueProducts中的每一行,並找到MainTable中的匹配行。如果該行尚不存在,請創建它。然後找出「uniqueProducts」具有哪些MainTable列的值,並將其複製。這聽起來是對的嗎?

下面是一些示例代碼,用於銷售總額(RowID = 1)。我沒有這樣做對股票的貨架上,或任何其他列,但是這應該給你的想法:

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

這應該是固定的,以避免在運行時創建的列名,並創建強命名的DataTable會得到擺脫<System.Int32>的東西,但這應該讓你開始。