2016-07-31 29 views
0

Update: obwohl ich das gewünschte Ergebnis habe, aber wenn die zweite Funktion auf die Datentabelle zugreifen, ist der Wert immer noch gleich Es ist ein sequentielles Programm mit zwei Funktionen in verschiedenen Klassen. Erste Sortier- und zweite Ersetzungsfunktion. So sollte es den Wert sortieren und andere Funktion sollte in der Lage sein, die sortierte Tabelle abzurufen, aber wenn es die Datentabelle abruft, gibt es die unsortierte Tabelle.Update: Ergebnis wird nicht in den Originaldatensatz übertragen. Sortieren von Zeilen im Datensatz mit C#

Ich habe acceptchanges() verwendet, aber es gibt auch das gleiche Ergebnis.

Das Programm versucht, die Tabelle nach dem erforderlichen Feld zu sortieren, und das Ergebnis wird in der Variablen Sorted table gespeichert. Ich versuche, dies zu den ursprünglichen i-e sourceTables zu kopieren, aber es funktioniert nicht und fügt eine andere Reihe hinzu, anstatt zu aktualisieren [wie unten gezeigt]. Ich habe versucht, ganze Tabelle zu kopieren, aber es funktioniert nicht und durch Hinzufügen von Zeilen gibt es nicht das erforderliche Ergebnis. Ich habe verschiedene Methoden verwendet, aber ich bekomme nicht das gewünschte Ergebnis.

List<DataTable> sourceTables = context.GetDataByTable(sourceTable.StringValue); 
List<DataTable> targetTables = context.GetDataByTable(targetTable.StringValue, sourceTables.Count); 

     string orderDesc= orderField.StringValue + " DESC"; 


     for (int i = 0; i < sourceTables.Count; i++) 
     { 
      DataView dv = sourceTables[i].DefaultView; 

      if (orderDirection.StringValue == OrderDirectionAsc) 
      { 
       // for Sorting in Ascending Order 
       dv.Sort = orderField.StringValue; 
      } 

      else 
      { 
       // for Sorting in Descending Order 
       dv.Sort = orderDesc; 
      } 


      DataTable sortedTable = dv.ToTable(); 

      DataTable dttableNew = sortedTable.Clone(); 
      //sourceTables[i] = sortedTable.Copy(); 
      //targetTables[i] = dv.ToTable(); 
      //targetTables[i] = sortedTable.Copy(); 
      // foreach (DataRow dr in sortedTable.Rows) 
      //// targetTables[i].Rows.Add(dr.ItemArray); 
      //} 
      for (int j = 0; j < sourceTables[i].Rows.Count; j++) 
      { 
       if (sourceTable.GetValue().ToString() == targetTable.GetValue().ToString()) 
       { 
        foreach (DataRow dr in sortedTable.Rows) 
        { 
         targetTables[i].Rows.Add(dr.ItemArray); 

        }     
       else 
       { 
        foreach (DataRow dr in sortedTable.Rows) 
        { 
         targetTables[i].Rows.Add(dr.ItemArray); 

        } 

        // targetTables[i] = sortedTable.Copy(); does not work 

        //foreach (DataRow drtableOld in sortedTable.Rows) 
        //{ 
        // targetTables[i].ImportRow(drtableOld); 
        //} 

Statt die ersten Werte zu ersetzen, es ist das Hinzufügen von mehr Reihen

enter image description here

jede Hilfe

+0

Warum Sie die sortierte Ansicht nach etwas kopieren, tun müssen? – Plutonix

+0

Ich versuche die Tabelle zu sortieren. Da die Sortierfunktion bei der Datentabelle nicht funktioniert. Nachdem ich die Ansicht sortiert habe, versuche ich, die ursprüngliche Datenansicht durch die Ansicht zu ersetzen. –

+0

Wenn ich quellTabellen [i] = dv.ToTable() verwende sind die Änderungen nur lokal –

Antwort

1

würde geschätzt Wenn irgendein Problem mit doppelten Daten haben oder die Änderungen sind nur lokale und bewirkt nicht die ursprüngliche Datentabelle. Denken Sie daran, immer die .ImportRow (dr) -Funktion zu verwenden, um der Tabelle Zeilen hinzuzufügen, und wenn Sie Tables [i] .Rows.Add (dr.ItemArray); Die Änderungen wirken sich nur auf die lokale Tabelle und nicht auf die ursprüngliche Tabelle aus. Verwenden Sie .clear, um die alten Zeilen aus der ursprünglichen Tabelle zu entfernen. Die direkt an der ursprünglichen Funktion vorgenommene Aktion wirkt sich nur auf die Zeilen aus. Wenn es auf der Klonkopie vorgenommen wird, ändert sich die ursprüngliche Tabelle nicht.
Dies ist der komplette Code

  DataTable sortTable = dv.ToTable(); 

      if (sTable.GetValue().ToString() == tTable.GetValue().ToString()) 
      { 

       sTables[i].Clear(); 

       foreach (DataRow dr in sortTable.Rows) 

       { 
        sTables[i].ImportRow(dr); 
       } 

       sTables[i].AcceptChanges(); 

      }