2012-04-26 30 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