2010-11-24 15 views
6

私のデータベースからDataTableにデータをロードしていて、列の1つが日付フィールドです。DataTableの列のデータ型をDateTimeからStringに変更する

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
{ 
    SqlCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "MySP"; 
    cmd.CommandType = CommandType.StoredProcedure; 

    conn.Open(); 
    using (SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     dt.Load(rdr); 
    } 
} 

私の代わりに完全な日付を含有すると、それは「MM/DD/YYYY」のようにフォーマットされるように、その列の書式を設定したいと思います。

テーブルの各行をループしてその列のセルを変更しようとしましたが、文字列が有効なDateTimeオブジェクトではないというエラーが表示されます。

カラムのDateTypeを文字列に変更しようとしましたが、テーブルの塗りつぶし後にDateTypeを変更できないというエラーが表示されます。

どうすればいいですか?これはとても簡単なことですが、私はそれに非常に苦労しています。

+0

どこで、どのようにあなたは、このデータテーブルを使用していますか?私はあなたがあなたのUI層(例えば、データソースとして)でそれを使用するときに日付を書式設定するべきではないと言いたいと思います。 –

+0

私はそれをGridViewにバインドします。列は動的なので、デザインビューではフォーマットできません。列のインデックスも異なる可能性がありますので、RowDataBoundイベントでも同様に変更するのは簡単ではありません。 – Steven

+0

その場合、値を挿入する前に列タイプを文字列にしてフォーマットすることができます。 –

答えて

10

は、新しい列を作成し、そこにフォーマットされた日付を格納することができ:

dt.Columns.Add("DateStr"); 

foreach (DataRow dr in dt.Rows) 
{ 
    dr["DateStr"] = string.Format("{0:MM/dd/yyyy}", dr["OriginalDate"]); 
} 
2

DateTime structの値をフォーマットすることはできません。そんなことは考えないでください。

通常、 を日付と時刻で表した値を保持することが目的です。

フォーマットを指定できるのは、そのインスタンスの値を文字列に変換するときだけです。 DataTableスキーマをそのままの状態にします。書式を設定する必要がある場合は、メソッドで使用できるformatsの一部を見てください。

4
101はYYYY/MM/DDのフォーマットコードです

... CONVERTを使用して文字列にフィールドをキャストする

SELECT CONVERT(varchar, DateFieldName, 101) AS DateFieldNameFormatted 
をあなたのストアドプロシージャを変更し

(他のコード/フォーマットのためのリンクを参照してください)

あなたの周りの仕事として
関連する問題