2016-06-11 9 views
0

Ich muss Zeilen von DataTable mischen, wie zufälliger Zugriff auf Indizes in meinem Szenario nicht funktionieren würde. Also habe ich dt1 mit Basisdaten, die ich mischen muss und dt ist die DataTable, die Daten gemischt hat. Und mein Code:kann Zeilen von DataTable nicht mischen

int j; 
for (int i = 0; i < dt1.Rows.Count - 1; i++) 
{ 
    j = rnd.Next(0, dt1.Rows.Count - 1); 
    DataRow row = dt1.Rows[j]; 
    dt.ImportRow(row); 
} 

Ihr ist kein Syntaxfehler, aber wenn ich meinen Code ausführen, wo ich einen weiteren Zugriff dt ich einige gleichen Zeilen zweimal erhalten importiert. Was mache ich hier falsch?

+0

Wenn ich raten müsste würde ich sagen, das, was Sie falsch machen versucht, eine DataRow zu ergreifen, die zu einer Datatable gehört und in einer anderen Datentabelle gesetzt (den Fehler Nachricht ist ziemlich klar). Sie müssen wahrscheinlich eine * neue * Zeile erstellen, sie zu 'dt' hinzufügen und dann * die Zeile aus' dt1' entfernen. –

+0

int j; für (int i = 0; i

+0

Aber leider hat es nicht die Datentabelle gemischt, sondern importiert gleiche Zeilen mehrere Zeit –

Antwort

1

DataRow kann nur zu einem einzigen DataTable gehören, erstellen Sie eine neue Zeile mit den Werten von bestehenden DataRow.

dt.Rows.Add(row.ItemArray); 

Oder

dt.ImportRow(row); 

Update:

Ein anderer Ansatz jede Sammlung randomisieren (Von diesem Link).

public static class Extensions 
{ 

    private static Random random = new Random(); 

    public static IEnumerable<T> OrderRandomly<T>(this IEnumerable<T> items)   
    {    
     List<T> randomly = new List<T>(items); 

     while (randomly.Count > 0)   
     { 

      Int32 index = random.Next(randomly.Count);   
      yield return randomly[index]; 

      randomly.RemoveAt(index);   
     }  
    } 
} 

Jetzt können Sie jede Sammlung zufällig gerade durch diese Erweiterung Funktion aufrufen.

var dt = dt1.AsEnumerable() 
      .OrderRandomly() 
      .CopyToDataTable(); 

prüft diese Example

+0

ja ich hatte das bereits getan, aber selbst das funktioniert nicht für mich. Bitte versuchen Sie mir für das bearbeitete Problem zu helfen –

+0

Können Sie uns zeigen, wie Sie 'DataTable' definiert haben? –

+0

@ OmkarFrozen überprüfen Sie das Update. –

Verwandte Themen