2

例 : データベースから myDataTable をいくつかのクエリ (多くの異なるクエリ) を介して取得し、フィールドDateDateTimeフィールドをユーザーが希望するプレゼンテーションに変更したいと考えています。

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= を持つ列に問題がないことがわかりますが、現在のデータベース クエリに関係なく、DateTimeどうすれば dataType を処理できますか? Date日付はデータベースで利用できますが、C# では利用できません。

更新:これは、日付値の終了日が 12:00: AM または 00:00:00 であることを確認することで実行できます。しかし、これは偽のソリューションのようで、実際の DateTime 値も同じ値を持つ可能性があります。この値は、DataType がDateDateTime ではなく、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

SQL Severのdatetimedateデータ型については、C#で使用できるDateTimeデータ型のみがあります。

次のデータ型マッピング表を参照してください 。SQLServerデータ型マッピング

于 2012-10-14T18:07:33.177 に答える