2012年7月15日 星期日

自訂文字的資料格式(DataFormatSring)

這次的demo修改自GridView 批次刪除功能(複選多個資料列)_1所以畫面設定的部分在這邊不多敘述,這篇主要針對畫面上樣式做修改,做個紀錄

◎以上程式範例AspNet42_1.aspx,如在頁框下不能操作,請開新視窗操作
◎如果有問題歡迎您提出,dnowba很需要有人和我一起討論


自訂文字的資料格式(DataFormatSring):以自訂日期的顯示方式 為主要解說

test_time 欄位下的日期顯示是「月/日/年」與我們閱讀習慣「年/月/日」不同。時間上都是顯示 12:00:00 AM,似乎在新增資料時並沒有紀錄時間。而且看起來不大雅觀。
image

首先查查,我們在資料庫的欄位設計,test_time 的欄位型別是datetime,就是同時紀錄日期範圍和時間範圍的類型。(下面的查詢方法是用ASP.NET的內的查詢產生器,有的時候只是要查一下資料,不想開整個sql server ,一資料庫多的話讀取會慢,就用這種方法…)
image

理所當然,在ADO.NET幫我們完成與容器GridView的聯繫後,我們檢視一下HTML碼,SqlDataSource也幫我們自動生成,參數的型別也是紀錄成Type=Datetime。如下圖反白處。
image

那怎麼GridView上時間總是顯示12:00:00 AM ? 想知道為什麼嗎?
因為我們在輸入資料的時候並沒有建立時間嘛!
(不過我一直在想,這種只輸入日期不輸入時間,Visual Basic竟然也給我過,而且可以接受的格式超級多,不管是09-31-2012還是20120931都可以,真是有雄厚的背後程式在運作,如果是 C# 的話,應該死很慘吧←純猜測)
image

覺得我很腦殘吧,如果要圖方便,怎麼不資料庫的欄位弄其他的日期型別
我當然知道資料型別,好吧,我們就來設計別的型別看看,我們隨便弄個新的資料表,把日期的部分用簡單的date資料型別吧。
image

在GridView上繫結這個資料表,喔!.NET還是很聰明,不過寫法變了一下,本來type=datetime變成DbType=”Date”,屬性不大一樣了…image

好了,接著就新增一筆資料看看,結果就是不管你是用datetime還是date型別,顯示就是一樣,用date的話,還是顯示時間給你看。
image

所以關於自訂文字的資料格式字串(DataFormatSring),是非學不可的事情
◎一般 Gridview 的 BoundField 欄位,這種類別是透過資料繫結產生的欄位,在編輯資料欄位時,在資料分類上就有提供DataFormatSring讓你把格式套用到繫結值上面。以這次的demo,就是設成{0:yyyy/MM/dd} 或是 {0:d}。
image

DataFormatSring中,{0:yyyy/MM/dd} 的 0 代表的是要繫結的值,{0}在BoundField 裡就是欄位值索引,這裡表示索引DataField中第一個繫結欄位。(  {1}就是索引DataField第二個資料…不過在BoundField裡,是不允有二個的)。如果DataFormatSring只有寫{0} 就表示資料本身。

同樣的功能,在編輯資料行中的HyperLinkField的DataTextFormatString,和ImageField的DataImageUrlFormatString都是類似的用法,都有搭配一組DataField(資料繫結欄位) 來格式化字串。(反正牽涉資料綁定的控制項,大概都會有格式化字串的功能來修改顯示樣式。

而在冒號後面的格式字串、代表我們希望資料顯示的格式,yyyy/MM/dd 是格式化的樣式,有興趣請參考我之前的文章寫過 文字標示的控制項:Literal和Label 裡有特別加入格式字串參考,這邊只作特別說明:

日期若是用(d) Short date、(D) Long date 這種短代碼的方式來作的話,還會牽涉文化Culture 設定。
image

例如1987年12月04日,文化設為 English (United States) 的話就會顯示 12/4/1987,但是文化是German (Germany)的話就是顯示04.17.1987,台灣的話就是 1987/12/4。

(附註:要修改文化設定的方式很多,可以針對整個IIS,可以是單一網站,也可以是網站某個應用站台,也可以是單一網頁,甚至是單一個控制項…How to: Set the Culture and UI Culture for ASP.NET Web Page .)

所以如果希望網頁的格式不要被文化牽著鼻子走的話,可以用yyyy/MM/dd的方式來顯示。

另外補充一個,如果你的繫結文字裡頭有包含html標記的話(例如你的資料輸入是使用CKEditor之類的html文字編輯器),要把DataFormatSring中的HtmlEncode=False,將字串作 HTML 編碼,並傳回編碼的字串
image

像有關於格式字串的詳細內容,例如除了日期外、貨幣、數學符號等,需要不同的顯示樣式,可以參考 http://msdn.microsoft.com/zh-tw/library/fbxft59x(v=vs.90)


It’s my life live love …

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...
// Dnow Function