DataGridView отображает время в виде даты - PullRequest
0 голосов
/ 06 марта 2012

У меня есть 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;
    }

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Вы можете настроить столбец для использования определенной строки формата, например T, которая является форматом длительного времени (чч: мм: сс).

Используйте для этого свойство DefaultCellStyle.Format столбца, содержащего ваше значение времени. Вы можете использовать конструктор форм (щелкните маленькую стрелку, отображаемую при выборе элемента управления DataGridView, затем выберите «Редактировать столбцы», выберите столбец и нажмите кнопку «...» для свойства DefaultCellStyle) или вы можете сделать это в коде.

Просто добавьте столбцы вручную (в конструкторе или в коде) и установите для свойства AutoGenerateColumns значение false.

0 голосов
/ 06 марта 2012

Сколько строк вы ожидаете? Для нескольких (<1000) строк я бы сделал: </p>

....
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...