2016-07-21 7 views
1

GridViewコントロールの列を書式設定するときに、DataBoundイベント内にコードを配置しています。なんらかの理由で列のコレクションに値が設定されていないため、機能しません。コントロールはバインドされていますが、動作しますが、列コレクションにはゼロの数が表示されているため、コードは機能しません。
アイデア?ASP.Net GridView Webコントロールの書式の列

 protected void gvReport_DataBound(object sender, EventArgs e) 
    { 
     for (int columnIndex = 0; columnIndex <= gvReport.Columns.Count - 1; columnIndex += 1) 
     { 
      var col = ((BoundField)gvReport.Columns[columnIndex]); 

      if (object.ReferenceEquals(col.DataField.GetType(), typeof(System.DateTime))) 
       col.DataFormatString = "MM/dd/yyyy"; 
     } 
    } 

答えて

1

AutoGenerateColumns="true"で生成された列は、GridViewコントロールのColumnsコレクションでは使用できません。 RowDataBoundイベントハンドラ内のセルを処理することができます。

protected void gvReport_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      object value = (e.Row.DataItem as DataRowView).Row.ItemArray[i]; 

      if (value is DateTime) 
      { 
       TableCell cell = e.Row.Cells[i]; 
       cell.Text = ((DateTime)value).ToShortDateString(); 
      } 
     } 
    } 
} 
関連する問題