【发布时间】:2016-05-17 19:47:21
【问题描述】:
我使用加载到列表视图中的数据库 (json)。
我收到的 json 是按照我想要的方式排序的,但是当将不同的 categoryID 分组到不同的类别时,它确实会像 json 的样子(按照 end_date 从前到后排序)对自己进行排序,但它会加载到列表中不同的类别。
这是我接收数据的方式:
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;
}
列表视图和项目:
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
}
因此,现在在列表中,项目将自身堆叠在各自的类别(1 和 2)中,而不是通过 JSON 顺序。
我怎样才能调整它以使项目的顺序与 json 相同?我想在“end_date”之后订购列表,就像 json 一样。
我的 json 看起来像这样,我已经通过 end_date 订购了它,但正如我上面提到的。在我将它们分成不同的类别后,它不会在列表视图中对自身进行排序。
更新:IT 订购但仅在该特定列表上,而不是像我想要的那样一起订购。因此 theListOne 在日期之后对自身进行排序,但仅在 theListOne 中的项目内排序,并且与 theListTwo 相同。
{
status: "ok",
records: [
{
title: "Test",
end_date: "2016-05-22 16:00:00",
id_events_categories: "1",
}
]
}
【问题讨论】:
-
如果初始 json 已经排序,那么遍历它并分配给两个组不应该改变项目的相对顺序。
-
您能否为您的问题提供simple but complete example 以便我们可以编译和测试,最好是控制台应用程序?因为我们只有代码片段,可以让您了解您在做什么,但不要独立编译,因此无法调试。
-
为什么不按日期对 theListOne 和 theListTwo 进行排序,然后再将它们分配给您的列表视图?
-
我无法使用简单的测试应用重现您的问题。见dotnetfiddle.net/H0Qqua。我能猜到的是,如果
theListOne和theListTwo是字段而不是局部变量,那么它们的值会在对Concat的调用被评估之前发生变化——记住,LINQ 使用惰性评估。尝试改用var result = theListOne.Concat(theListTwo).ToList();看看是否有帮助。 -
那么Group1按日期排序,然后Group2按日期排序?这正是我所期望的——我不确定你还能期望它如何工作?
标签: c# json xamarin xamarin.forms