2

示例:我通过一些查询(许多不同的查询)从数据库中获取 myDataTable,并希望将DateandDateTime字段更改为用户所需的演示文稿。

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";
          }
     }
}

您可以看到具有 DataType= 的列没有问题DateTimeDate,但是无论我当前的数据库查询如何,如何处理dataType ?日期在数据库中可用,但在 c# 中不可用。

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

4

3 回答 3

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");
}

现在您的 DateTime 已转换为 Date,您可以在 DataGridView 中使用它。

于 2012-10-14T18:09:44.750 回答
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
     }
}
于 2012-10-30T13:16:35.583 回答
0

There is only DateTime datatype available in C# for datetime, date datatype of SQL Sever.

See the following datatype mapping table for reference: SQL Server Data Type Mappings

于 2012-10-14T18:07:33.177 回答