如何对具有DateTime值但显示为String的DataGridView列进行排序?

时间:2011-12-13 23:05:36

标签: c# datagridview

我在我的程序中有一个datagriview,我想按数据排序,我使用:

dataGridView1.Columns["Date"].ValueType = typeof(DateTime);

但是当我点击日期列时,它没有正确排序。

我的日期格式是:23-12-1997

是不正确的日期写入格式?

3 个答案:

答案 0 :(得分:3)

您的单元格格式应为:

dataGridView1.Columns["Date"].DefaultCellStyle.Format = "dd-MM-yyyy";

通常,如果ValueType是DateTime,则此格式不会影响此列的排序。我怀疑你将String值放入此列,而不是DateTime值。

一个例子:

            DataTable t = new DataTable();
            DataColumn c1 = new DataColumn("Name", typeof(String));
            DataColumn c2 = new DataColumn("Date", typeof(DateTime));
            t.Columns.Add(c1);
            t.Columns.Add(c2);
            for (int i = 0; i < 10; i++)
            {
                t.Rows.Add(new object[] {i.ToString(), DateTime.Now.AddHours(i * 2) });
            }
            dataGridView1.DataSource = t;
            dataGridView1.Columns[1].DefaultCellStyle.Format = "HH MM/dd/yyyy";

答案 1 :(得分:1)

我做了很多寻找,然后使用了一些非常简单的东西。我添加了一个隐藏列,并按以下格式输入字符串日期: File.GetLastWriteTime(fl).ToString(“yyyyMMddhhmm”)并对隐藏列进行排序。 当我使用文件时间时,没有理由认为任何日期/时间都不起作用。

答案 2 :(得分:0)

我偶然发现了这个问题,研究了日期列上的DataGridView排序问题。我的情况比OP稍微复杂一点,所以我发帖在这里,希望能帮助别人。

在我的例子中,我的DataGridView的DataSource被设置为BindingSource对象。我的BindingSource的DataSource是一个DataSet对象。通过更改DataSet设计器中的属性,我无需添加任何代码即可修复排序问题。我去了Visual Studio设计器并选择了我的DataSet。在属性窗口中,我选择了&#34;在DataSet Designer中编辑&#34;。然后在DataSet Designer中,我选择了我的Column,并将其DataType属性更改为System.DateTime(之前已将其设置为String)。问题解决了。