1

実際の問題は、タイトルが言うよりも少し複雑に思えます..しかし、誰かがそれを理解できることを願っています..

Gridview にバインドする予定の 2 つのデータテーブルがあります。しかし、最初の dt のビットと 2 番目の dt のビットが必要です。

2 番目のテーブルには、最初のテーブルの同じ列のすべての行を表す行が 1 つだけあります。

ただし、2 つのテーブル間に主キーや関係はありません。

私の説明が十分にクリアされることを願っています..どうもありがとうございます...すぐに解決策が得られることを楽しみにしています..

例えば、

ここに画像の説明を入力

私はdatatable.mergeを試しました。必要な最後のテーブルを生成しませんでした。

4

2 に答える 2

0

このリンクを試してください

http://social.msdn.microsoft.com/Forums/da-DK/adodotnetdataset/thread/ecb6a83d-b9b0-4e64-8107-1ca8757fe58c

linq を使用するか、すべてのテーブルをデータセットに配置して、データ テーブルに pk/fk を作成し、その方法でそれらを結合します。

于 2012-05-28T15:06:35.823 に答える
0
  ''' <summary>
  ''' Merge two datatables that have a 1:1 relationship
  ''' </summary>
  ''' <param name="dtb1">Required Datatable.</param>
  ''' <param name="dtb2">Required Datatable.</param>
  ''' <param name="dtb1MatchField">Required String. Field name in dtb1 to use to match records</param>
  ''' <param name="dtb2MatchField">Required String. Field name in dtb2 to use to match records</param>
  ''' <remarks></remarks>
  Private Function MergeDataTables(ByVal dtb1 As DataTable, ByVal dtb2 As DataTable, ByVal dtb1MatchField As String, ByVal dtb2MatchField As String) As DataTable
    Dim dtbOutput As DataTable = dtb1.Copy
    Dim lstSkipFields As New List(Of String)
    For Each dcl As DataColumn In dtb2.Columns
      Try
        dtbOutput.Columns.Add(dcl.ColumnName, dcl.DataType)
      Catch ex As DuplicateNameException
        lstSkipFields.Add(dcl.ColumnName)
      End Try
    Next dcl
    'Merge dtb2 records that match existing records in dtb1
    Dim dtb2Temp As DataTable = dtb2.Copy
    For int2 As Integer = dtb2Temp.Rows.Count - 1 To 0 Step -1
      Dim drw2 As DataRow = dtb2Temp.Rows(int2)
      Dim o2 As Object = drw2(dtb2MatchField)
      For Each drw1 As DataRow In dtbOutput.Rows
        Dim o1 As Object = drw1(dtb1MatchField)
        If o1.ToString = o2.ToString Then
          For Each dcl As DataColumn In dtb2Temp.Columns
            If Not lstSkipFields.Contains(dcl.ColumnName) Then
              drw1(dcl.ColumnName) = drw2(dcl.ColumnName)
            End If
          Next dcl
          dtb2Temp.Rows.Remove(drw2)
        End If
      Next drw1
    Next int2
    'add rows that weren't in dtb1
    For Each drw2 As DataRow In dtb2Temp.Rows
      Dim drw1 As DataRow = dtbOutput.NewRow
      For Each dcl As DataColumn In dtb2Temp.Columns
        drw1(dcl.ColumnName) = drw2(dcl.ColumnName)
      Next dcl
      dtbOutput.Rows.Add(drw1)
    Next drw2
    Return dtbOutput
  End Function
于 2012-05-29T04:56:01.510 に答える