在DataGridView列中仅显示日期

时间:2016-03-22 20:09:48

标签: c# winforms datagridview

我有一个字段作为DateTime,我想在我的datagridview c#中只显示日期(没有时间)。我得到了约会时间。例如:22.03.2016 00:00:00 任何帮助,将不胜感激。 我尝试过以下方法:

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

2 个答案:

答案 0 :(得分:2)

问题是您的列不属于DateTime类型,因此当您应用格式时,它不起作用。

看看创建数据表的方法,您使用dataTable.Columns.Add(prop.Name);创建了列,这意味着列的DataTypestring,格式不适用于列。 (正如我之前猜测的那样)

注意

  • 如果要在DataTable中显示列表,则无需将列表转换为DataGridView,只需将其设置为DataSource即可网格。
  • 要将DateTime列格式化为仅显示Date部分,只需将该列的DefaultCellStyle.Format设置为yyyy/MM/dd
  • 作为方法的快速修复,您可以使用以下代码行替换此行代码dataTable.Columns.Add(prop.Name);dataTable.Columns.Add(prop.Name, prop.PropertyType);使用属性的数据类型作为列的数据类型。

答案 1 :(得分:0)

有一种更简单的方法。下次,如果您通过单击DataGridView右上角的小三角形将数据添加到DataGridView;

根据以下条件编辑您的 XXXDataSet.Designer

this.columnYYY = new global::System.Data.DataColumn("YYY", typeof(**string**), null, global::System.Data.MappingType.Element);

字符串更改为 DateTime 。解决问题享受。 :)