How to change datagridview column date format when gridview has autogeneratecolumns = true

I can generate columns in a gridview depending on the search options, multiple columns will be added or deleted.

Please suggest me set the date format dd-mmm-yyyyfor the entire column in gridview.

I am currently doing this with help rowdatabound. It checks every row, so it takes time to display the results.

This is what I do in rowdatabound

if (e.Row.RowType == DataControlRowType.DataRow)
{
        System.Data.DataRowView dtview;
        DateTime dt;
        int intCounter;
        dtview = (DataRowView)e.Row.DataItem;

        for (intCounter = 0; intCounter <= dtview.Row.ItemArray.Length - 1; intCounter++)
        {
            if (dtview.Row.ItemArray[intCounter] is System.DateTime)
            {
                dt = (DateTime)dtview.Row.ItemArray[intCounter];
                e.Row.Cells[intCounter].Text = dt.ToString("dd-MMM-yyyy");
            }
        }
    }

This checks all records, and then changes based on the condition.

But I want to do it better by simply highlighting the column and changing the date format for the full column.

+4
source share
6

: , .

A GridView ColumnsGenerator, IAutoFieldGenerator. , , .

IAutoFieldGenerator, : GridViewColumnsGenerator. , , .

, , :

public override List<AutoGeneratedField> CreateAutoGeneratedFields(
      object dataObject, Control control);

, List <T> of AutoGeneratedField. AutoGeneratedField DataFormatString:

public override string DataFormatString { get; set; }

, , , CreateAutoGeneratedFields, :

public class MyDerivedGridViewColumnsGenerator : GridViewColumnsGenerator
{
   public override List<AutoGeneratedField> CreateAutoGeneratedFields(
      object dataObject, Control control)
   {
       var list = base.CreatedAutoGeneratedFields(dataObject, control);
       foreach(var field in list)
       {
         if(field.DataType == typeof(DateTime))
             field.DataFormatString = "dd-MMM-yyyy";
       }
       return list;
   }
}

, ColumnsGenerator, . , GridViewColumnsGenerator :

 // GridView myGridView;
 myGridView.ColumnsGenerator = new MyDerivedGridViewColumnsGenerator();

, GridView, , .

+1

. . - RowDataBound(). .

        protected void gvGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            DataRowView drv = (DataRowView)e.Row.DataItem;

            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                for (int i = 0; i < ct_columns; i++)
                {
                    DataControlFieldCell dcf = e.Row.Cells[i] as DataControlFieldCell;

                    /* default date format: hide 'time' values */
                    if (e.Row.RowIndex == 0 
                        && (dcf.ContainingField.GetType().Name == "BoundField"           // defined columns
                        || dcf.ContainingField.GetType().Name == "AutoGeneratedField"))  // auto-generated columns 
                    {
                        BoundField bf = dcf.ContainingField as BoundField;

                        if (bf != null && String.IsNullOrEmpty(bf.DataFormatString))
                        {
                            string col_name = bf.DataField;

                            if (!String.IsNullOrEmpty(col_name) && drv[col_name] != null)
                            {
                                if (drv[col_name].GetType().Name == "DateTime")
                                {
                                    // set format for first row
                                    string date = drv[col_name].ToString();
                                    if (!String.IsNullOrEmpty(date))
                                        dcf.Text = DateTime.Parse(date).ToShortDateString();

                                    // set format for other rows
                                    bf.DataFormatString = "{0:M/dd/yyyy}";  
                                }

                            }
                        }
                    }
                }
            }
        }
+1

DataTable Grid, ,

public static void ChangeDateFormat<T>(this DataColumn column, Func<object, T> conversion)
{
   foreach(DataRow row in column.Table.Rows)
   {
    row[column] = conversion(row[column]);
   }
}

dataTable.Columns["DateColumanName"].ChangeDateFormat(
val => DateTime.Parse(val.ToString()).ToString("dd/MMM/yyyy"));

,
, , .

, .

0

: , , .

view - , DataTable, AutoGenerateColumns, false.

, , DateTime .

DataTable dt = view.GetReport();

Type dateType = typeof(DateTime);
foreach (DataColumn column in dt.Columns)
{
    BoundField f =  new BoundField();
    f.HeaderText = column.ColumnName;
    f.DataField = column.ColumnName;

    if(column.DataType == dateType)
        f.DataFormatString = "{0:d}"; // Or whatever

    gvReport.Columns.Add(f);
}

gvReport.DataSource = dt;
gvReport.DataBind();
0

datetime, ColumnAdded DataGridView:

    private void dataGridView_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
    {
        if (e.Column.ValueType == typeof(DateTime))
        {
            e.Column.DefaultCellStyle.Format = "dd-MMM-yyyy";
        }
    }
0

Eval aspx:

<% # Eval("Date", "{0:dd-MMM-yyyy}") %>

:

<asp:TemplateField HeaderText="Date">
    <ItemTemplate>
        <% # Eval("Date", "{0:dd-MMM-yyyy}") %>
    </ItemTemplate>
</asp:TemplateField>
-1

All Articles