DataGridView将时间显示为日期

本文关键字:日期 显示 时间 DataGridView | 更新日期: 2023-09-27 18:27:00

我有一个CSV文件,它有一列时间,时间的格式类似(在CSV文件中)08:22:07

DataGridView会将其转换为

12/30/1899 8:22 AM

有什么建议吗?

我的代码看起来像

    public static DataTable ParseCSV(string path, String pattern)
    {
        if (!File.Exists(path))
            return null;
        string full = Path.GetFullPath(path);
        string file = Path.GetFileName(full);
        string dir = Path.GetDirectoryName(full);
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;"
            + "Data Source='"" + dir + "'''";"
            + "Extended Properties='"text;HDR=Yes;FMT=Delimited'"";
        string query = "SELECT [Pc-Tag], [User-Name], [Date], [Time] FROM " + file;// +" WHERE [User-Name] LIKE " + pattern;
        DataTable dTable = new DataTable();
        OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);
        try
        {
            dAdapter.Fill(dTable);
        }
        catch (InvalidOperationException ioe)
        {
            Console.WriteLine(ioe.Message.ToString());
        }
        dAdapter.Dispose();
        return dTable;
    }

DataGridView将时间显示为日期

您可以将列配置为使用特定的格式字符串,如T,它是长时间格式(hh:mm:ss)。

使用包含时间值的列的DefaultCellStyle.Format属性可以执行此操作。您可以使用窗体设计器(单击选择DataGridView控件时显示的小箭头,然后选择"编辑列",选择列,然后按DefaultCellStyle属性的"…"按钮),也可以在代码中执行此操作。

只需确保手动添加列(在设计器或代码中),并将AutoGenerateColumns属性设置为false

您希望有多少行?对于少数(<1000)行,我会这样做:

....
dAdapter.Dispose();
dtable.Columns.Add("Custom", typeof(string));
foreach(var row in dtable.Rows)
{
     row["Custom"] = "17:15:30"; //here goes your logic to convert the Time Value
                                 // example: row["Time"].ToString("T");
}
return dTable;

另一个性能更好的解决方案是添加一个表达式列;

http://msdn.microsoft.com/de-de/library/system.data.datacolumn.expression%28v=vs.80%29.aspx

var expression = "SUBSTRING([Time], 11, IF(LEN([Time]) = 19, 8, 7))";
dtable.Columns.Add("Custom", typeof(string), expression);