【问题标题】:JSON into listview in xamarin forms, does not order in the list after the jsonJSON以xamarin形式进入listview,不在json之后的列表中排序
【发布时间】: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。我能猜到的是,如果theListOnetheListTwo 是字段而不是局部变量,那么它们的值会在对Concat 的调用被评估之前发生变化——记住,LINQ 使用惰性评估。尝试改用var result = theListOne.Concat(theListTwo).ToList(); 看看是否有帮助。
  • 那么Group1按日期排序,然后Group2按日期排序?这正是我所期望的——我不确定你还能期望它如何工作?

标签: c# json xamarin xamarin.forms


【解决方案1】:

这是你想要的吗:

var result = theListOne.Concat(theListTwo);

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

*编辑:对不起,我是个白痴。试试这个:

var result = theListOne.Concat(theListTwo);

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

【讨论】:

  • 错误:Cannot convert ProjectName.ProjectPage.items expression to type 'string'
  • @medvedo 发生在哪里?将什么变量分配给string?单独的错误消息不是很有帮助。
  • 这里的代码给出了错误:eventsList.ItemsSource = result.OrderByDescending(x =&gt; DateTime.Parse(x)).ToList();
  • 完美运行。非常感谢老兄!!
  • @medvedo 当然可以。很高兴它有帮助。很抱歉从评论者那里偷了它。
猜你喜欢
  • 2020-11-20
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
相关资源
最近更新 更多