2016-05-17 6 views
0

Ich arbeite mit einer Datenbank (JSON), die ich in eine ListView laden.JSON in Listenansicht in Xamarin Formen, nicht in der Liste nach dem JSON

Mein JSON, das ich erhalte, ist so geordnet, wie ich es will, aber als Gruppe die verschiedenen CategoryIDs in verschiedenen Kategorien sortiert es sich wie der JSON aussieht (mit end_date zuerst bis zuletzt bestellt), sondern lädt es in die Liste hinein die verschiedenen Kategorien.

Dies ist, wie ich meine Daten empfangen:

static public async Task<JObject> getEvents() 
    { 
     var httpClientRequest = new HttpClient(); 

     var result = await httpClientRequest.GetAsync ("http"); 

     var resultString = await result.Content.ReadAsStringAsync(); 

     var jsonResult = JObject.Parse (resultString); 

     //this below does not effect how the list turns out. I have tried it 
     /* 
     JArray sorted = new JArray (jsonResult ["records"].OrderBy (obj => obj ["end_date"])); 

     jsonResult ["records"] = sorted; */ 


     return jsonResult; 

    } 

Die Listenansicht & Artikel:

public class items 
    { 
     public string eventTitle { get; set;} 
     public string endDate { get; set;} 
    } 

new List <items> theListOne = new List <items>(); 
new List <items> theListTwo = new List <items>(); 

string idcategory; 

async void loadList() 
{ 

var getItems = await phpApi.getEvents(); 

    foreach (var currentitem in getItems["records"]) { 

       idcategory = currentitem ["id_events_categories"].ToString(); 


if (idcategory == "1") { 

        theListOne.Add (new items() { 

         eventTitle = currentitem ["title"].ToString(), 
         endDate = currentitem ["end_date"].ToString(), 
        }); 
    } 

if (idcategory == "2") { 

        theListTwo.Add (new items() { 

         eventTitle = currentitem ["title"].ToString(), 
         endDate = currentitem ["end_date"].ToString(), 
        });  
        } 

     } 

var result = theListOne.Concat(theListTwo); 

eventsList.ItemsSource = result; //eventsList is my listview x:name 

} 

So, jetzt in der Liste, stapeln sich die Elemente in ihrer jeweiligen Kategorie nach oben (1 & 2) und nicht über die JSON-Reihenfolge.

Wie kann ich dies einstellen, so dass die Artikel die gleiche Reihenfolge wie die JSON? Ich möchte die Liste nach "end_date" genauso wie der JSON bestellen.

Mein JSON sieht so aus und ich habe es über das end_date bestellt, aber wie ich oben erwähnt habe. Es sortiert sich nicht in der Listenansicht, nachdem ich sie in verschiedene Kategorien unterteilt habe.

UPDATE: IT-Bestellungen aber nur auf dieser bestimmten Liste und nicht zusammen wie ich es will. So ordert sich theListOne nach den Daten, aber nur innerhalb der Items in der ListOne und der gleichen Sache mit der List2.

{ 
    status: "ok", 
    records: [ 
       { 
        title: "Test", 
        end_date: "2016-05-22 16:00:00", 
        id_events_categories: "1", 
       } 

      ] 
} 
+0

aktualisiert mit json – medvedo

+0

wenn die anfängliche json ist bereits bestellt, dann durchlaufen und die Zuordnung zu zwei Gruppen sollten nicht die relative Reihenfolge der Elemente ändern. – Jason

+0

Können Sie ein [einfaches, aber vollständiges Beispiel] (https://stackoverflow.com/help/mcve) Ihres Problems erstellen und testen, idealerweise eine Konsolen-App? Wie es ist, haben wir nur Codefragmente, die eine Vorstellung davon geben, was Sie tun, aber nicht eigenständig kompilieren und daher nicht debuggt werden können. – dbc

Antwort

1

Ist das, was Sie wollen:

var result = theListOne.Concat(theListTwo); 

eventsList.ItemsSource = result.OrderByDescending(x => DateTime.Parse(x)).ToList(); 

* Edit: Sorry, ich bin ein Idiot. Versuchen Sie folgendes:

var result = theListOne.Concat(theListTwo); 

eventsList.ItemsSource = result.OrderByDescending(x => DateTime.Parse(x.endDate)).ToList(); 
+0

Error: 'Kann ProjectName.ProjectPage.items Ausdruck in Typ" String " – medvedo

+0

@medvedo nicht konvertieren Wo passiert das? Welche Variable wird einer "Zeichenkette" zugewiesen? Die Fehlermeldung allein ist nicht sehr hilfreich. – hvaughan3

+0

Dieser Code hier gibt den Fehler: 'eventsList.ItemsSource = Ergebnis.OrderByDescending (x => DateTime.Parse (x)). ToList();' – medvedo

Verwandte Themen