Come unire due datatable in uno ? asp.net vb o c#

vero problema sembra un po ‘ complicato di quanto dice il Titolo .. ma spero che qualcuno può capire ..

Ho due datatable che ho intenzione di applicare Gridview. Ma ho bisogno di un po ‘di primo dt e po’ dalla seconda dt.

Seconda tabella è solo una riga che rappresenta per ogni riga, nella stessa colonna nella prima tabella.

C’è nessuna chiave primaria o relazione tra due tabelle però.

Spero la mia spiegazione è schiarito abbastanza .. Grazie mille … in attesa di avere presto una soluzione,.

Per esempio,

Come unire due datatable in uno ? asp.net vb o c#

Ho provato datatable.unire però. Non producono l’ultima tabella che voglio.

  • Laurence, è più un SQL domanda di un .Rete uno. Si potrebbe unire due tabelle in una stored procedure di SQL puro per produrre i necessari risultati per la griglia. Come si può accedere ai vostri dati nel codice?
  • sì. due datatable è venuto da traino stored procedure, ma nella mia organizzazione, processo del database è gestito da db persona, ed è difficile da inseguire in giro così sto cercando di fare io in .net lato. c’è un modo per farlo in .netta del lato o devo vedere di nuovo db per lavoro ? grazie …
  • È possibile utilizzare LINQ? Ci sono un sacco di esempi su come partecipare a diversi datatable su questo sito web MSDN (ad esempio, msdn.microsoft.com/en-us/library/bb386921.aspx). In caso contrario, si può ancora provare il datatable unione: DataTable fullTable= tabella1.Copia(); fullTable.Merge(tabella2); ma mostra solo le colonne che si desidera nel vostro GridView.
  • Grazie Andrei … cercherò di usare Linq o se non posso cercherò Eval con variabili come la seconda tabella contiene una sola riga. Buona Giornata.
InformationsquelleAutor lawphotog | 2012-05-28



2 Replies
  1. 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
    • Ciao SSS ,, .. grazie per l’aiuto. La tua risposta sembra grande . ma se ho messo in paragrafi come nel mio esempio, MergeDataTables(dtTable1, dtTable2, Classe, Class_Code) poi è venuto fuori come questo .. non come il risultato che avrei voluto come nel mio esempio img176.imagevenue.com/… … proverò a modificare il codice in seguito però. Sembra che facendo un grande lavoro, ma probabilmente mis-ha capito il mio problema da una frazione.
    • È necessario disporre di un campo di collegamento classe (A1, A2) con il class_code (243). Come fai a sapere che codice classe classe A1 ha?
    • OH … non è così Bro .. come nel mio esempio, la seconda tabella sarà solo una riga ….. che si applica a ogni riga della prima tabella .. si vede nell’esempio, il soggetto codice 102 rappresenta per tutte le materie .. cablata ma è come funziona il sistema. Come ho detto, non c’è alcuna relazione tra le tabelle. Siamo in grado di corrispondere solo dal nome della COLONNA. Grazie per l’aiuto.
    • Come nel mio esempio, ci sono le colonne con lo stesso nome della prima tabella e seconda tabella … siamo in grado di abbinare la colonna se i nomi di colonna sono uguali in due tavoli .. e siamo in grado di rinominare una colonna, e si applica sia a colonna nella tabella risultato … questo è quello che stavo cercando di fare ..
    • I valori in singola fila mai cambiare? Se non basta codificare loro in SQL ad esempio SELECT *, ‘102’, Come Subject_code, ‘243’ Come Class_code DA parte degli Studenti
    • OH cambierà .. dipende dal parametro passiamo a quando la chiamata di stored procedure .. e sia il primo che il secondo tabelle sono restituite con pertinenza in modo che tutti dobbiamo fare è unire poi insieme se abbiamo trovato la stessa nomi di colonna nelle tabelle.

Lascia un commento