2015-04-10 2 views
0

У меня есть несколько данных, которые я хочу объединить. Строки охватывают таблицы, а не столбцы.Как объединить (объединить) datatables в .net, где строки охватывают несколько данных datatables

Это означает, что datatable1 может иметь столбцы 1, 2, 3 и datatable2 могут иметь столбцы 4, 5, 6.

Я хочу, чтобы объединить два, так что datatable1 имеет столбцы 1, 2, 3, 4, 5 , 6.

Я чувствую, что прочитал много примеров, но что-то продолжает не работать.

Private Sub mergeDataTables() 
    Dim primaryKeyValue As Integer 
    Dim tableIndex As Integer = 0 
    For Each t As System.Data.DataTable In dataSet.Tables 
     Dim pkColumn As New System.Data.DataColumn 
     primaryKeyValue = 0 

     'add column to house primary key and move it to the far left of the table 
     pkColumn = t.Columns.Add() 
     pkColumn.SetOrdinal(0) 

     'populate the primary key column with unique values 
     For Each r As System.Data.DataRow In t.Rows 
      r(0) = primaryKeyValue 
      primaryKeyValue += 1 
     Next 

     'set the primary key column as a primary key 
     t.PrimaryKey = {t.Columns(0)} 


     If tableIndex > 0 Then 
      For col = 1 To t.Columns.Count - 1 
       'assign unique column names to all columns but primary key column 
       t.Columns(col).ColumnName = String.Format("{0}{1}", GetExcelColumnName(tableIndex), col) 'using getexcelcolumname for no other reason that to get a unique column name 1 = a 2 = b etc 
      Next 
      dataSet.Tables(0).Merge(t) 
     End If 

     tableIndex += 1 
    Next 
End Sub 
+0

Попробуйте поиск Google для».net соединить две таблицы ". – rheitzman

+0

@ rheitzman У меня есть, вот как я получил код выше. Однако это не дает желаемого результата, поэтому я решил, что делаю что-то не так, что кто-то может мне помочь. – donL

+0

@ rheitzman Вы видите что-то, что я пропустил бы из поиска Google? – donL

ответ

1

Попробуйте - вам нужно пройти в DataSet, содержащий ваши исходные таблицы в качестве параметра, а столбцы не могут иметь одинаковые имена по таблицам:

Private Sub mergeDataTables(ds As DataSet) 

    Dim mergedTable As New DataTable("MergedData") 

    mergedTable.Columns.Add("ID", System.Type.GetType(System.Int32)) 

    'Create the combined fields for the table 
    For Each t As System.Data.DataTable In ds.Tables 
     For Each col As DataColumn In t.Columns 
      Dim newCol As New DataColumn(col.ColumnName, col.DataType) 
      mergedTable.Columns.Add(newCol) 
     Next 
    Next 

    Dim rowId As Integer = 0 

    For Each row As DataRow In ds.Tables(0).Rows 

     Dim newRow As DataRow = mergedTable.NewRow 

     For Each col As DataColumn In mergedTable.Columns 

      If col.ColumnName = "ID" Then 
       newRow(col.ColumnName) = rowId 
      Else 
       For Each t As DataTable In ds.Tables 

        'This table has the column we need here 
        If t.Columns.Contains(col.ColumnName) Then 
         'Retrieve the corresponding data from the same row in the source table 
         newRow(col.ColumnName) = t.Rows(rowId)(col.ColumnName) 
         Exit For 
        End If 
       Next 
      End If 

     Next 

     mergedTable.Rows.Add(newRow) 
     rowId += 1 
    Next 

End Sub 
Смежные вопросы