2012-03-06 2 views
0

У меня есть файл CSV, который содержит столбец для времени и времени отформатирован выглядеть (в файле CSV) 08:22:07DataGridView отображает время как даты

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

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

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

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

0

Сколько строк вы ожидаете? Для нескольких (< 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); 
+0

Что бы вы сделали, если у вас 1500 строк? –

+0

@Thorsten - Я бы использовал выражение, которое быстрее. Посмотрите мое обновленное решение. –

Смежные вопросы