2011-01-20 7 views
0

以下の問題が発生しました。私はできる限り最善の方法で説明しようとしますが、もっと明確にする必要がある場合は教えてください。私は、Googleのスプレッドシートにいくつかの事柄を入れて説明を助け、下のリンクを参照してください。DataTableにデータセットを挿入

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

スプレッドシート:データスプレッドシートに指定されたフォーマットに変換/翻訳する必要

SQLクエリ(データセット)から
MainTable = C#アプリケーションデータテーブル
データ= SQL結果メインテーブルスプレッドシート。

各ROWIDは固有のものに関連しているため、そこにあります。例えば、 rowid 1が「今月の合計売上高」であると仮定すると、データスプレッドシートで、セルC2がMainTableスプレッドシートのセルE2に移動する必要があることがわかります。

rowid 2が「棚上在庫」の場合、データスプレッドシートで、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

非常に混乱しやすい質問です。データセット、データテーブル、スプレッドシートはすべて異なるものです。スプレッドシートのテーブルはDataですか?これはDataTableであり、DataSetではありません。

スプレッドシートは順序付けされ、空の行を持ち、DataTableよりもC#配列に似ています。 DataTablesには空の行がありません。

rowidは、実際にはDataColumnの悪い名前ですが、通常はデータベースのシーケンシャルな行IDを参照するために使用されます。 prodcodeはどこにも記載されていません、あなたの「PRODUCT」データの後の数字ですか?

なぜ14個の空白行を追加しますか? DataTableにデータを持つ行のみを追加する必要があります。次に、loadUniqueProductsの行ごとにもう一度やります。データの大規模な複製。

私はあなたがしたいと思っているのは、loadUniqueProductsの各行をステップ実行し、一致する行をMainTableに見つけることです。この行がまだ存在しない場合は、作成します。次に、 "uniqueProducts"がどのMainTable列に値を持っているかを調べ、それらをコピーします。それは正しいと思いますか?

ここでは、Total Sales(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>ものを取り除いてください。

関連する問題