2012-10-14 53 views
2

例如:我通过一些查询(很多不同的查询)从数据库中获取myDataTable,并且想要将DateDateTime字段更改为用户想要的表示。c#中日期和日期时间数据类型有什么区别

void dgv_DataSourceChanged(object sender, EventArgs e) 
{ 
    for (int i = 0; i < dgv.Columns.Count; i++) 
    { 
      if (myDataTable.Columns[i].DataType == typeof(DateTime)) 
       dgv.Columns[i].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; 
      else 
      { 
       if (myDataTable.Columns[i].DataType == typeof(Date)) 
        dgv.Columns[i].DefaultCellStyle.Format = "dd-MM-yyyy"; 
      } 
    } 
} 

你可以看到有与具有数据类型= DateTime列没有问题,但我怎么能不管我目前的数据库查询的处理Date的dataType?日期在数据库中可用,但在c#中不可用。

更新:我可以通过检查日期值天气的结束来做到这一点,它是12:00:AM或00:00:00。但是,这似乎是一个虚假的解决方案,一个真正的DateTime值也可以具有相同的值。此值并不能保证数据类型是Date,而不是日期时间

+0

'datetime.Date == datetime' =>'true' when a date。 – leppie

回答

0

只有日期时间数据类型在C#中可以日期时间日期数据类型的SQL Sever的的。

请参见下面的数据类型映射表以供参考: SQL Server Data Type Mappings

2
foreach(DataRow dr in datatable.Rows) 
{ 
    DateTime dt = DateTime.ParseExact(dr["YourDateTimeColumnName"], 
           "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture); 
    string s = dt.ToString("dd/M/yyyy"); 
} 

现在您的日期时间转换为日期,你可以在DataGridView中使用它。

+0

Wajid Sahib!你有没有尝试过,因为'myDataTable.Columns [i] .ToString()'似乎不太正确(意思是它可以不使用任何行号?) – Sami

+0

我忘了.Column []。 – 2012-10-14 18:22:50

1

也许你无法区分。你可以在这个特定的情况下做什么是

for (int i = 0; i < dgv.Columns.Count; i++) 
{ 
    if (source.Columns[i].DataType == typeof(DateTime)) 
    { 
     string val = source.Rows[0][i].ToString(); 
     if (val.EndsWith("12:00:00 AM") ||val.EndsWith("00:00:00")) 
     { 
      dgv.Columns[i].DefaultCellStyle.Format = "yyyy-MM-dd"; 
      //Your date Format 
     } 
     else 
      dgv.Columns[i].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; 
      //Your date and Time Format 
    } 
} 
相关问题