2016-05-13 8 views
0

Ich habe 3 Spalten auf einer Seite und es gibt eine Sortierschaltfläche auf der Seite, die nach Datum sortiert wird. Ich habe versucht, das herauszufinden, ohne Glück. Unten ist ein Beispiel für einen Datensatz. Es kann 50 davon auf einer Seite geben.Sortieren Selen Objekte C# - keine Tabelle

Wie bekomme ich alle drei "Spalten" in ein Array und sortieren die Ausgabe nach Asc oder Desc Reihenfolge? Dann kann ich auf den Sortierwert klicken und die neue Array-Liste abrufen und vergleichen. Wenn ich eine findElements * .toList mache, die mir eine Liste aller Zeilen gibt, aber ich kann das Datumsfeld nicht identifizieren, um zu sortieren.

Was vermisse ich ????

 |*444577233 444577233 (WORK 555.123.4567)* | *Voicemail (1 min 49 sec)* | *Apr 09, 2016 09:42 AM*| 

     <div class="full-mailbox-message alert alert-warning" style="display: none;"> 
     <div id="message-list" class="message-list message-list-scroll"> 
     <div class="list-item filterable message-item js-message-item cp " data-id="9408"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="9408"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="5555551759" title="CONPORT 010,CR3522">CONPORT 010,CR3522 (555.555.1759)</span> 
     <span class="time" title="Apr 08, 2016 07:30 PM">Apr 08, 2016 07:30 PM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (57 sec) </span> 
     </span> 
     </span> 
     </div> 
     <div class="list-item filterable message-item js-message-item cp " data-id="8592"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="8592"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="5555551759" title="CONPORT 010,CR3522">CONPORT 010,CR3522 (555.555.1759)</span> 
     <span class="time" title="Mar 28, 2016 08:31 PM">Mar 28, 2016 08:31 PM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (7 sec) </span> 
     </span> 
     </span> 
     </div> 
     <div class="list-item filterable message-item js-message-item cp " data-id="8523"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="8523"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="5555551754" title="CONPORT 005,CR3522">CONPORT 005,CR3522 (555.555.1754)</span> 
     <span class="time" title="Mar 27, 2016 11:45 PM">Mar 27, 2016 11:45 PM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (7 sec) </span> 
     </span> 
     </span> 
     </div> 
     <div class="list-item filterable message-item js-message-item cp " data-id="8477"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="8477"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="withheld" title="Identity withheld">Identity withheld (withheld)</span> 
     <span class="time" title="Mar 24, 2016 03:51 AM">Mar 24, 2016 03:51 AM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (1 sec) </span> 
     </span> 
     </span> 
     </div> 
     <div class="list-item filterable message-item js-message-item cp " data-id="8470"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="8470"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="withheld" title="Identity withheld">Identity withheld (withheld)</span> 
     <span class="time" title="Mar 22, 2016 09:59 PM">Mar 22, 2016 09:59 PM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (4 sec) </span> 
     </span> 
     </span> 
     </div> 
     <div class="list-item filterable message-item js-message-item cp " data-id="7191"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="7191"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="withheld" title="Identity withheld">Identity withheld (withheld)</span> 
     <span class="time" title="Mar 04, 2016 04:53 AM">Mar 04, 2016 04:53 AM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (4 sec) </span> 
     </span> 
     </span> 
     </div> 
     <div class="list-item filterable message-item message-unread js-message-item cp " data-id="7074"> 
     <span class="inline"> 
     <input class="custom js-message-item-checkbox" type="checkbox"> 
     <label></label> 
     </span> 
     <span class=" " data-id="7074"> 
     <i class="message-list-icon icon-voice-mail custom-icon"></i> 
     <span class="sender" data-phone="5555551756" title="cert 1756">cert 1756 (555.555.1756)</span> 
     <span class="time" title="Mar 03, 2016 09:03 AM">Mar 03, 2016 09:03 AM</span> 
     <span class="summary"> 
     <span class="text"> Voicemail (4 sec) </span> 
     </span> 
     </span> 
     </div> 

Antwort

1

Ich denke, Sie müssen DataTable und DataView verwenden. Erster Schritt: Fügen Sie DataTable alle Zeilen Zelle für Zelle hinzu. Dann erstellt DataView und sortiert nach dem Feld. Klicken Sie dann auf Sortieren und erstellen Sie eine neue DataTable-Instanz, und fügen Sie alle Zeilen/Zellen erneut hinzu. Vergleichen Sie abschließend die Daten in jeder Zeile von DataView und DataTable. Siehe Code unten:

public void TestSorting() 
{ 
    DataTable table1 = GenerateTable(); 
    DataView dv = table1.DefaultView; 
    dv.Sort = "datetime ASC"; // or "datetime DESC" 
    DataRowCollection sortedRows = dv.ToTable().Rows; 

    // Click sort here e.g. timeHeader.Click(); 

    DataTable table2 = GenerateTable(); 
    DataRowCollection rows = table1.Rows; 

    // Compare sortedRows and rows here 
} 

public DataTable GenerateTable() 
{ 
    DataTable table = new DataTable(); 
    table.Columns.Add("datetime", typeof(DateTime)); 
    table.Columns.Add("sender", typeof(string)); 
    table.Columns.Add("time", typeof(string)); 
    table.Columns.Add("summary", typeof(string)); 

    IReadOnlyCollection<IWebElement> rows = driver.FindElements(By.CssSelector("#message-list > div.list-item ")); 
    foreach (var listItem in rows) 
    { 
     IWebElement sender = listItem.FindElement(By.CssSelector("span.sender")); 
     IWebElement time = listItem.FindElement(By.CssSelector("span.time")); 
     IWebElement summary = listItem.FindElement(By.CssSelector("span.summary")); 

     DataRow r = table.NewRow(); 

     string format = "MMM dd, yyyy hh:mm tt"; 
     DateTime dt = DateTime.ParseExact(time.Text.Trim(), format, CultureInfo.InvariantCulture); 
     r["datetime"] = dt; 
     r["sender"] = sender.Text; 
     r["time"] = time.Text; 
     r["summary"] = summary.Text; 

     table.Rows.Add(r); 
    } 

    return table; 
} 
+0

Danke Buaban. Ich werde mir das heute Abend ansehen, wenn ich nach Hause komme. Ich habe ein paar Minuten damit gespielt, und obwohl ich nur 3 Zeilen habe, gibt es bei sortierten Zeilen und Zeilen 113 Punkte. Es sieht nach einer Menge Duplikate aus, und ich bin mir nicht sicher warum. Das Ausführen eines AreEqual für Zeilen und sortierte Zeilen schlägt fehl. Vielen Dank für die Hilfe. Ich habe diesen Prozess noch nie zuvor gesehen und es ist definitiv ziemlich cool. – Dazed

+0

@Dazed Können Sie eine vollständige HTML-Quelle posten? So kann ich herausfinden, was Locator für Zeilen sein sollte. – Buaban

+0

Wenn ich heute Nacht nach Hause komme, werde ich es hinzufügen. Danke für die Hilfe. – Dazed