2016-03-22 7 views
0

フィールドにDateTimeというフィールドがあります。データグリッドビューのC#に日付のみを表示します。私はdatetimeを取得します。例:22.03.2016 00:00:00 何か助けていただければ幸いです。私は次のことを試してみました :DataGridView列に日付のみを表示する

private void bindListToGridView1(List<Item> list) 
{ 
    try 
    { 
     dataGridView1.AllowUserToAddRows = false; 
     ListtoDataTableConverter converter = new ListtoDataTableConverter(); 
     DataTable dt2 = converter.ToDataTable(listToPresent); 
     dataGridView1.DataSource = null; 

     using (dt2) 
     { 
      dataGridView1.AutoGenerateColumns = false; 
      dataGridView1.ColumnCount = 3; 
      dataGridView1.Columns[0].Name = "id"; 
      dataGridView1.Columns[0].HeaderText = "ID"; 
      dataGridView1.Columns[0].DataPropertyName = "id"; 
      dataGridView1.Columns[1].Name = "itemName"; 
      dataGridView1.Columns[1].HeaderText = "Item Name"; 
      dataGridView1.Columns[1].DataPropertyName = "itemName"; 
      dataGridView1.Columns[2].Name = "productionDate"; 
      dataGridView1.Columns[2].HeaderText = "Production Date"; 
      dataGridView1.Columns[2].DataPropertyName = "productionDate"; 
      dataGridView1.Columns[2].DefaultCellStyle.Format = "yyyy'/'MM'/'dd"; 
      dataGridView1.DataSource = dt2; 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
} 

編集

をここでは、私はDataTableを作成するために使用する方法である:

public class ListtoDataTableConverter 
{ 
    public DataTable ToDataTable<T>(List<T> items) 
    { 
     DataTable dataTable = new DataTable(typeof(T).Name); 
     //Get all the properties 
     PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
     foreach (PropertyInfo prop in Props) 
     { 
      //Setting column names as Property names 
      dataTable.Columns.Add(prop.Name); 
     } 
     foreach (T item in items) 
     { 
      var values = new object[Props.Length]; 
      for (int i = 0; i < Props.Length; i++) 
      { 
       //inserting property values to datatable rows 
       values[i] = Props[i].GetValue(item, null); 
      } 
      dataTable.Rows.Add(values); 
     } 
     //put a breakpoint here and check datatable 
     return dataTable; 
    } 
} 
+0

私はdatetimeを取得します。 dataTable dt2の22.03.2016 00:00:00 –

+0

、productionDate列の値の実際のタイプは何ですか?それはDateTimeですか? – ASh

+0

はいそれは公開ですDateTime productionDate {get;セット; } –

答えて

2

問題はあなたのコラムはとても種類DateTimeではないです書式設定を適用すると機能しません。

は、データテーブルを作成する方法を見て、あなたはそれが列のDataTypestringであることを意味し、フォーマットが列に適用されませんどのdataTable.Columns.Add(prop.Name);を使用して列を作成しました。あなたはDataGridViewでそれを表示したい場合、それはグリッドのDataSourceとして設定するだけで十分ですDataTableにリストを変換する必要はありません

  • を(私が以前に推測通り) 。
  • DateTime列にDate部分のみを表示するには、その列のDefaultCellStyle.Formatyyyy/MM/ddに設定するだけで十分です。
  • このコード行dataTable.Columns.Add(prop.Name);を次のコード行に置き換えることができます。dataTable.Columns.Add(prop.Name, prop.PropertyType);列のデータ型としてプロパティのデータ型を使用します。
+0

私は問題を見る。私はプロプログラマーではないので、私はそれで何もできません。私は別のプログラマーが作成したクラスを使用しています。 –

+0

あなたのアプリケーションでこのメソッドを使用することについてはわかりませんが、このコード行(dataTable.Columns.Add(prop.Name);)を次のコード行で置き換えることができます。 .Columns.Add(prop.Name、prop.PropertyType); '列のデータ型としてプロパティのデータ型を使用します。 –

+0

'DataGridView'に表示する場合は' List'を 'DataTable'に変換する必要はありません。グリッドの' DataSource'として設定するだけで十分です。 –