2012-04-26 36 views
0

我發現很難使用參考數據表將數據錶轉換爲新的數據表。我的問題很混亂,我不擅長解釋事物,所以我畫了一張照片(見下文)。如何使用參考數據錶轉換數據表asp.net

我在內存上有兩個數據表,我需要使用第二個映射表創建第三個數據表以供參考。列名僅僅是例子,它不能被硬編碼。

希望有人能幫助我。非常感謝。

enter image description here

+0

你可以用這兩個表的關係,然後隱藏或刪除列或更改列名稱,而不是 – skhurams 2012-04-26 12:40:40

+0

謝謝,但我奮力如何真正做到這一點..你能解釋我升技更多? – lawphotog 2012-04-26 13:08:37

回答

1

這可能不是最優化的代碼,但它似乎工作...基本上使用映射表的「新列」列中的列名創建新的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 2012-04-26 15:51:48

0

試試這個,但是這是在C#中,你可以將其轉換到VB

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

感謝您的幫助,但..對不起..我不能這樣做..我將無法知道什麼是在數據表中,所以我不能硬編碼像這樣的列..我唯一可以肯定是..在映射表中,第一列是第一個表中的列,第二列是我想要生成的表的列。 – lawphotog 2012-04-26 13:48:53

+0

您還可以使用targettable.columns [0] .caption =「First名稱」; //通過索引 – skhurams 2012-04-30 06:39:19