使用C#按日期对数据网格列进行排序

4
我有一个包含日期的列,当我点击列标题时,该列按数字排序而不是按日期排序。如何按日期排序?日期格式为dd/mm/yy。
示例(从旧到新排序):
10/12/08 <-- 十二月 10/09/08 <-- 九月 12/12/08 <-- 十二月
非常感谢

这个网格是如何被填充的?它需要以某种方式知道该列中的字段是DateTime类型。 - BFree
5个回答

10

源代码是一个数据表格吗?如果是的话,您可能需要指定所涉及的列的类型为DateTime:

myDataTable.Columns["ColumnName"].DataType = System.Type.GetType("System.Date");

希望这可以帮到你!


2
如果数据源来自存储过程,则在数据集中将日期作为两列返回。一列格式化(varchar),另一列为DateTime数据类型。
假设存储过程返回的列是:COLUMN_STRING_FORMAT和COLUMN_DATETIME_FORMAT。
在网格的标记中,使用以下代码:
<asp:BoundColumn DataField="COLUMN_STRING_FORMAT" SortExpression="COLUMN_DATETIME_FORMAT" DataFormatString="{0:dd-MMM-yyyy}" /> <asp:BoundColumn DataField="COLUMN_DATETIME_FORMAT" Visible="false"/>
注意第一行中的Sort Expression。它指的是DateTime数据类型的列。
当我按DD-MMM-YYYY格式排序时,这对我有用。

1

试试这个,它对我有效。

dataGridView1.Columns[colNum].DefaultCellStyle.Format = "d";

colNum替换为实际列号。 d表示短日期。我还有军事时间,所以我不得不添加HH:mm:ss来表示时间块。


1

你应该使用单元格格式

dgv.Rows[rowId].Cells["colCreated"].Style.Format = "HH:mm :: dd/MM/yyyy";

或者对于整个列使用类似的样式(请参见DefaultCellStyle)


0

当数据网格未绑定到数据源且数据网格逐行填充时,以下方法适用于我:

//Init 
dataGridView_records.Columns[0].DefaultCellStyle.Format = "dd/MM/yy HH:mm:ss";

然后按照以下方式填充数据网格:
DateTime date = DateTime.ParseExact((String)drs["data"], "dd/MM/yy HH:mm:ss", CultureInfo.InvariantCulture);
object[] gdr = new object[1] { date };//add the other columns data here
dataGridView_records.Rows.Add(gdr); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接