2012-04-26 6 views
0

リファレンスデータテーブルを使用して、データテーブルを新しいデータテーブルに変換するのが難しいと考えています。私の質問は混乱しており、私は事を説明するのが良くないので、絵を描きました(下記参照)。リファレンスデータテーブルasp.netを使用してデータテーブルを変換する方法

私は2つのデータテーブルをメモリ上に持っており、参照のために2番目のマッピングテーブルを使って3番目のデータテーブルを作成する必要があります。列名は単なる例であり、ハードコーディングすることはできません。

誰かが私を助けることを願っています。どうもありがとう。

enter image description here

+0

あなたは、この2つのテーブルとの関係を作り、その後、代わりに – skhurams

+0

感謝を非表示にしたり、列を削除するか、列名を変更するが、私は実際にそれを行う方法を苦労していますすることができます..あなたは、ABITもっと私を説明することができますか? – lawphotog

答えて

1

これが最も最適化されたコードではないかもしれない助けてdidntのなら、私が知っているVBに変換することができますC#であるが、動作しているようです...基本的に、マッピングテーブルの "New Columns"列の列名を使用して新しいDataTableを作成し、最初のテーブルの各行に対して、マッピングテーブルをステップ実行し、 "Old 「新しい列」列の「列」列

Protected Sub MapData() 

    Dim table1 = New DataTable() 
    Dim table2 = New DataTable() 
    Dim table3 = New DataTable() 

    With table1 
     .Columns.Add("Fore Name") 
     .Columns.Add("Sir Name") 
     .Columns.Add("Date of Birth") 
     .Columns.Add("Country") 

     Dim newRow = .NewRow() 
     newRow("Fore Name") = "AA" 
     newRow("Sir Name") = "AA" 
     newRow("Date of Birth") = "01.01.1999" 
     newRow("Country") = "UK" 
     .Rows.Add(newRow) 
     ' etc 
    End With 

    With table2 
     .Columns.Add("Old Columns") 
     .Columns.Add("New Columns") 

     Dim newRow = .NewRow() 
     newRow("Old Columns") = "Fore Name" 
     newRow("New Columns") = "First Name" 
     .Rows.Add(newRow) 

     newRow = .NewRow() 
     newRow("Old Columns") = "Sir Name" 
     newRow("New Columns") = "Last Name" 
     .Rows.Add(newRow) 

     newRow = .NewRow() 
     newRow("Old Columns") = "Date of Birth" 
     newRow("New Columns") = "DOB" 
     .Rows.Add(newRow) 
    End With 

    For Each rowData As DataRow In table2.Rows 
     table3.Columns.Add(rowData("New Columns")) 
    Next 

    For Each table1Data As DataRow In table1.Rows 
     Dim newRow = table3.NewRow() 

     For Each rowMap As DataRow In table2.Rows 
      newRow(rowMap("New Columns")) = table1Data(rowMap("Old Columns")) 
     Next 

     table3.Rows.Add(newRow) 
    Next 

End Sub 
+0

を分割して、私は思っていましたが、ここでもう一度..ハードコードされた列で..今、私はあなたが完璧にやったと理解しています....ありがとう。 ..... – lawphotog

0

これを試してみたが、これはあなたが

targetTable.Columns["forename"].Caption = "First Name";// Rename the column 
targetTable.Columns["SirName"].Caption = "Last Name";// Rename the column 
targetTable.Columns["DateofBirth"].Caption = "DOB";// Rename the column 
targetTable.Columns["country"].Table.Columns.Remove("country");//this will remove the column 

//reorder column in case you need it 
// targetTable.Columns["First Name"].SetOrdinal(0); 
// targetTable.Columns["Last Name"].SetOrdinal(1); 
// targetTable.Columns["DOB"].SetOrdinal(2); 

// newtable =targettable.copy();// this will copy everthing to newtable 

はそれが

+0

助けてくれてありがとう..申し訳ありません..私はそれをすることはできません。私はデータテーブルにあるものを知ることができないので、そのような列をハードコードすることはできません。確かに..マッピングテーブルでは、最初の列は最初のテーブルの列で、2番目の列は作成したいテーブルの列です。 – lawphotog

+0

targettable.columns [0] .caption = "First名"; //インデックスを付けて – skhurams

関連する問題