首页 > 解决方案 > 按自定义格式 DateTime 列对 DataTable 进行排序

问题描述

我有一个包含 2 列的数据表:第一列是城市名称,第二列是日期,我必须按日期升序对其进行排序。

日期的格式是MM/dd/yyyy,我成功地使用 DataTable.DefaultView.Sort = "Date asc";

但我不得不将格式更改为dd/MM/yyyy它停止工作。

为了使用这种自定义格式对表格进行排序,我需要做什么?

这是输入 Ploiesti 19/05/2017 Ploiesti 20/05/2017 Ploiesti 21/05/2017 Sinaia 21/05/2017 Sinaia 22/05/2017 Sinaia 23/05/2017 Constanta 12/06/2017 Constanta 13/06/2017 Constanta 14/06/2017 Constanta 15/06/2017 Predeal 20/06/2017 Barsana 11/06/2017 Barsana 11/07/2017 Borsa 22/05/2017 Borsa 22/06/2017 Borsa 22/07/2017 Brasov 30/05/2017 Brasov 30/06/2017

这是我使用 DataTable.DefaultView.Sort 后的输出:

Barsana 11/06/2017 Barsana 11/07/2017 Constanta 12/06/2017 Constanta 13/06/2017 Constanta 14/06/2017 Constanta 15/06/2017 Ploiesti 19/05/2017 Ploiesti 20/05/2017 Predeal 20/06/2017 Ploiesti 21/05/2017 Sinaia 21/05/2017 Sinaia 22/05/2017 Borsa 22/05/2017 Borsa 22/06/2017 Borsa 22/07/2017 Sinaia 23/05/2017 Brasov 30/05/2017 Brasov 30/06/2017

标签: c#visual-studio

解决方案


您可以尝试使用以下代码使用新格式对​​数据表进行排序。

代码:

 private void button1_Click(object sender, EventArgs e)
        {

            foreach (DataRow dr in table.Rows)
            {
                dr["Date"] = DateTime.ParseExact(dr["Date"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture).ToShortDateString();
            }
            table.DefaultView.Sort = "Date asc";
            dataGridView1.DataSource = table;

        }

        private void Form1_Load(object sender, EventArgs e)
        {

            table.Columns.Add("Name");
            table.Columns.Add("Date");
            table.Rows.Add("Ploiesti", "19/05/2017");
            table.Rows.Add("Ploiesti", "20/05/2017");
            table.Rows.Add("Ploiesti", "21/05/2017");
            table.Rows.Add("Sinaia", "22/05/2017");
            table.Rows.Add("Sinaia", "19/05/2017");
            table.Rows.Add("Constanta", "23/05/2017");
            table.Rows.Add("Constanta", "12/06/2017");
            table.Rows.Add("Barsana", "13/06/2017");
            table.Rows.Add("Brasov", "11/07/2017");
            table.Rows.Add("Brasov", "22/07/2017");
            dataGridView1.DataSource = table;
        }

结果:

在此处输入图像描述


推荐阅读