kejames 學習筆記本

這裡是Kejames的筆記本,歡迎各位網友給予指教,謝謝。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Custom GridView BoundField DateTime Type Formating.

Posted on 2008-04-04 23:02  Kejames  阅读(713)  评论(1)    收藏  举报
今天網友問了一個有關GridView時間欄位格式設定的問題,就把寫法順便寫出來,讓新手參考一下
其實解法很多種,以下提供二種方法給您參考。
第一:最簡單的方法必須先設定 HtmlEncode="False" 然後定義
 DataFormatString="{0:d}"
 
or
 DataFormatString="{0:yyyy/MM/dd hh:mm:ss}"

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>GridView DateTime Format Research.</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
            
<Columns>
                
<asp:BoundField HeaderText="Name" DataField="Name" />
                
<asp:BoundField HeaderText="Hire Date(Format 1)" DataField="Hire" DataFormatString="{0:d}" />
                
<asp:BoundField HeaderText="Hire Date(Format 2)" DataField="Hire" DataFormatString="{0:yyyy/MM/dd hh:mm:ss}" HtmlEncode="False" />
                
<asp:BoundField HeaderText="Hire Date(Format 3)" DataField="Hire" DataFormatString="{0:yyyy-MM-dd}" HtmlEncode="False" />
            
</Columns>        
        
</asp:GridView>
    
    
</div>
    
</form>
</body>
</html>

Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
if ( !Page.IsPostBack )
        
{
            GridView1.DataSource 
= getDT();
            GridView1.DataBind();
        }


    }

    
private DataTable getDT()
    
{
        DataTable dt 
= new DataTable("Student");
        
        dt.Columns.AddRange(
new DataColumn[] 
            
new DataColumn("Name" , System.Type.GetType("System.String")),
            
new DataColumn("Hire" , System.Type.GetType("System.DateTime"))
        }
);

        DataRow dr 
= dt.NewRow();
        dr[
"Name"= "James";
        dr[
"Hire"= DateTime.Today;
        
        dt.Rows.Add(dr);

        
return dt;
    }

}


第二,則是在GridView的RowDataBound事件中取得DataItem裡的Hire這個Column然後設定 Cells[ColumnIndex].Text的值。

    protected void GridView1_RowDataBound(object sender , GridViewRowEventArgs e)
    
{
        
if ( e.Row.RowType == DataControlRowType.DataRow )
        
{
            DateTime dt;
            DateTime.TryParse(DataBinder.Eval(e.Row.DataItem , 
"Hire" , "{0:d}") , out dt);
            e.Row.Cells[
3].Text = dt.ToString("yyyy-MM-dd");        
        }

    }

二種方法的結果都一樣: