如何在VB.NET中添加列中的DATATABLE [英] HOW TO ADD COLUMN IN EXISTING DATATABLE IN VB.NET

查看:92
本文介绍了如何在VB.NET中添加列中的DATATABLE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我想在现有数据表中添加新列,我正在比较两个数据表并将结果提供给resultdatatable。我想基于两个数据表中的比较结果向resultdatatable添加新列。

这是我制作的代码。我希望并提前感谢您的帮助。



Hi,

I would like to add new column to existing datatable, I''m comparing to two datatable and give the result to resultdatatable. I would like to add new column to resultdatatable based on my comparison result in two datatables.
Here''s the code I made. I hope and thank your in advance for your help.

Public Function getDifferentRecords(FirstDataTable As DataTable, SecondDataTable As DataTable) As DataTable
       'Create Empty Table
       Dim ResultDataTable As New DataTable("ResultDataTable")
       ResultDataTable.Columns.Add("Action", GetType(String))

       'use a Dataset to make use of a DataRelation object
       Using ds As New DataSet()
           'Add tables
           ds.Tables.AddRange(New DataTable() {FirstDataTable.Copy(), SecondDataTable.Copy()})

           'Get Columns for DataRelation
           Dim firstColumns As DataColumn() = New DataColumn(ds.Tables(0).Columns.Count - 1) {}
           Dim i As Integer = 0
           While i < firstColumns.Length
               firstColumns(i) = ds.Tables(0).Columns(i)
               System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
           End While

           Dim secondColumns As DataColumn() = New DataColumn(ds.Tables(1).Columns.Count - 1) {}
           i = 0
           While i < secondColumns.Length
               secondColumns(i) = ds.Tables(1).Columns(i)
               System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
           End While

           'Create DataRelation
           Dim r1 As New DataRelation(String.Empty, firstColumns, secondColumns, False)
           ds.Relations.Add(r1)

           Dim r2 As New DataRelation(String.Empty, secondColumns, firstColumns, False)
           ds.Relations.Add(r2)

           'Create columns for return table
           i = 0
           While i < FirstDataTable.Columns.Count
               ResultDataTable.Columns.Add(FirstDataTable.Columns(i).ColumnName, FirstDataTable.Columns(i).DataType)
               System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
           End While

           'If FirstDataTable Row not in SecondDataTable, Add to ResultDataTable.
           ResultDataTable.BeginLoadData()
           For Each parentrow As DataRow In ds.Tables(0).Rows
               Dim childrows As DataRow() = parentrow.GetChildRows(r1)
               'If childrows Is Nothing OrElse childrows.Length = 0 Then
               '    ResultDataTable.LoadDataRow(parentrow.ItemArray, True)
               'End If

               If childrows Is Nothing Then
                   ResultDataTable.LoadDataRow(parentrow.ItemArray, True)
               ElseIf childrows.Length = 0 Then
                   '  ResultDataTable.LoadDataRow(parentrow.ItemArray, True)
                   Dim id2 = parentrow

                   For Each _row As DataRow In SecondDataTable.Rows
                       If (_row(0) = id2(0)) Then
                           For Each _col As DataColumn In FirstDataTable.Columns
                               'get specified column
                               If _row(_col.ColumnName) <> parentrow(_col.ColumnName) Then
                                   'display field value in 2nd table
                                   Dim strColumn = parentrow(_col.ColumnName).ToString()

                                   Dim newRow = ResultDataTable.NewRow()

                                   For Each _newRow In newRow.ItemArray

                                       For Each _colSource As DataColumn In ResultDataTable.Columns

                                           _newRow(_colsource)=

                                       Next

                                   Next

                                   Dim thisRow As DataRow = ResultDataTable.LoadDataRow(a, True)
                                   'thisRow("Action") = "Update"


                                   ' ResultDataTable.LoadDataRow(parentrow.ItemArray, True)

                               End If
                           Next
                       End If
                   Next
               End If


           Next

           'Dim dictTable1ID As New Dictionary(Of Integer, String)
           'Dim dictTable2ID As New Dictionary(Of Integer, String)

           'For Each tablerow1 As DataRow In ds.Tables(0).Rows
           '    dictTable1ID.Add(tablerow1(0), tablerow1(1))
           'Next

           'For Each tablerow2 As DataRow In ds.Tables(1).Rows
           '    dictTable2ID.Add(tablerow2(0), tablerow2(1))
           'Next


           'If SecondDataTable Row not in FirstDataTable, Add to ResultDataTable.
           For Each parentrow As DataRow In ds.Tables(1).Rows
               'parentrow(0)
               Dim _found As Boolean = False
               For Each _row As DataRow In FirstDataTable.Rows
                   If parentrow(0) = _row(0) Then
                       _found = True
                   End If
               Next

               If Not _found Then
                   ResultDataTable.LoadDataRow(parentrow.ItemArray, True)
               End If

           Next
           ResultDataTable.EndLoadData()
       End Using

       Return ResultDataTable
   End Function

推荐答案

阅读:向DataTable添加列 [ ^ ]


您好Jess,



请试试这个



Dim a()As Object = {Update}

a.CopyTo(parentrow.ItemArray,0)
Hi Jess,

Please try this

Dim a() As Object = {"Update"}
a.CopyTo(parentrow.ItemArray,0)


这篇关于如何在VB.NET中添加列中的DATATABLE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆