2016-08-21 2 views
0

Ich habe zwei Objekte, die zwei Tabellen mit demselben Spaltennamen enthalten. Ich muss diese Tabelle Werte in Mail-Körper mit Skript Tak in SSIS anzeigen. Die Mail sollte enthalten, erste Zeile der Tabelle eins und darunter sollte die Zeile der zweiten Tabelle.Alternative Tabellenzeilen in SSIS anzeigen

Die unten beschriebene Abfrage zeigt nur einzelne Tabellenwerte an.

oleDA.Fill(Obj_Duration, Dts.Variables["User::Obj_Duration"].Value); 
     foreach (DataColumn col in Obj_Duration.Columns) 
     { 
      Mail = Mail + "<th bgcolor='#7A378B' align='center'><font color='#FFFFFF'>" + col.ColumnName + "</font></th>"; 
     } 

     foreach (DataRow row in Obj_Duration.Rows) 
     { 



      sMail = sMail + "<tr>"; 

      foreach (DataColumn col in Obj_Duration.Columns) 
      { 


       sMail = sMail + "<td align = 'center'>" + row[col.Ordinal].ToString() + "</td>"; 
      } 

      sMail = sMail + "</tr>"; 
      Mail = Mail + sMail; 
      sMail = ""; 
      Mail = Mail + "<br>"; 
     } 

     sMail = ""; 
     Mail = Mail + "</table>"; 
     Mail = Mail + "<br>"; 

Sie müssen diese Abfrage ändern.

+0

@Marc-Hilfe benötigt. – rahul

Antwort

0

Gehen Sie die erste Tabelle als Foreach-Schleife und die zweite Tabelle verwenden Sie einfach die indizierte Position der ersten Tabellenzeile zu testen und sehen, ob eine Zeile vorhanden ist und die Informationen abrufen, anstatt zu versuchen, diese als eine für jede Schleife zu gehen

Also in Ihrem ersten Schleife am Ende fügen Sie einfach so etwas wie:

  int i = Obj_Duration.Rows.IndexOf(row); 
      if (AlternatingDataTableName.Rows.Count - 1 >= i) 
      { 
       DataRow alternatingRow = AlternatingDataTableName.Rows[i]; 
        //Start TR 

       foreach (DataColumn col in AlternatingDataTableName.Columns) 
       { 
        //Start TD 
        //alternatingRow[col.Ordinal].ToString() 
        //End TD 
       } 

       // end TR 
      } 

nur die Zeichenfolge bauen, wie Sie wollen, ich in einigen Kommentaren setzen andeuten, was Sie können, wenn tun wollen. Und ändern Sie den Namen der Datenvariablen in Ihre zweite Tabellenvariable. Um sicherzustellen, dass Sie wissen, wo ich vorschlage, geht das Ihr ganzer Code würde ungefähr so ​​aussehen:

 oleDA.Fill(Obj_Duration, Dts.Variables["User::Obj_Duration"].Value); 
     foreach (DataColumn col in Obj_Duration.Columns) 
     { 
      Mail = Mail + "<th bgcolor='#7A378B' align='center'><font color='#FFFFFF'>" + col.ColumnName + "</font></th>"; 
     } 

     foreach (DataRow row in Obj_Duration.Rows) 
     { 



      sMail = sMail + "<tr>"; 

      foreach (DataColumn col in Obj_Duration.Columns) 
      { 


       sMail = sMail + "<td align = 'center'>" + row[col.Ordinal].ToString() + "</td>"; 
      } 

      sMail = sMail + "</tr>"; 
      Mail = Mail + sMail; 
      sMail = ""; 
      Mail = Mail + "<br>"; 

      int i = Obj_Duration.Rows.IndexOf(row); 
      if (AlternatingDataTableName.Rows.Count - 1 >= i) 
      { 
       DataRow alternatingRow = AlternatingDataTableName.Rows[i]; 
        //Start TR 

       foreach (DataColumn col in AlternatingDataTableName.Columns) 
       { 
        //Start TD 
        //alternatingRow[col.Ordinal].ToString() 
        //End TD 
       } 

       // end TR 
      } 


     } 

     sMail = ""; 
     Mail = Mail + "</table>"; 
     Mail = Mail + "<br>"; 
    }