ASP.Net GridView 的自訂資料繫結 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
在論壇上,常常看到有網友提出這樣的問題:如果資料值是 Y/N,要顯示 是/否 在 GridView 上,要如何做?
這個問題有幾種解法 第一種:使用 GridView.RowDataBound 事件,搭配 TemplateField 這種方法是大部分的書上會介紹的方法 RowDataBound 事件,會傳入一個型別為 GridViewRowEventArgs 的參數 e e.Row 指的是 GridView 剛剛做完資料繫結的列 e.Row.DataItem 指的是用來做這個列的資料繫結的資料來源,型別是 object 如果以 DataTable 或是 DataSet 做資料來源,e.Row.DataItem 實際上是一個 DataRowView 所以,如果以 DataTable 或是 DataSet 做資料來源,(e.Row.DataItem as DataRowView).Row["欄位名稱"] 可以取得欄位的資料值 接下來,就是「數格子」,要知道你的 TemplateField 是第幾欄,還要知道要做自訂資料繫結的控制項是 ItemTemplate 的第幾個控制項 (e.Row.Cells[欄索引].Controls[控制項索引] as 控制項型別).Text = (e.Row.DataItem as DataRowView).Row["欄位名稱"].ToString() 這種方法的缺點是
第二種:使用單純自訂資料繫結,搭配 TemplateField 這種方法直接在 TemplateField 的 ItemTemplate 中放置一個 Label,並設置 Text 屬性的資料繫結為 Text='<%# Eval("欄位名稱").ToString() == "Y" ? "是" : (Eval("欄位名稱").ToString() == "N" ? "否" : "") %>' 簡單明瞭,只是判斷是寫在 .aspx 裡面,而且當資料值是 DbNull 的時候會發生錯誤,如果還要加上判斷是否為 DbNull 的語法就更複雜了 因此,此方法建議使用於簡單判斷以及資料欄位不允許 null 的狀況 第三種:使用自訂資料繫結方法,搭配 TemplateField 跟第二種方法類似,只是將 Label 的 Text 屬性的資料繫結改為呼叫一個自訂方法 (必須為 public 或 protected 方法) Text='<%# YesOrNo(Eval("欄位名稱")) %>' 並撰寫後端程式碼如下: protected string YesOrNo(object o) { string s = o == DbNull.Value ? "" : Convert.ToString(o); return s == "Y" ? "是" : (s == "N" ? "否" : ""); } 這樣的好處是
本文同步發表於 http://maolaoda.blogspot.com/2010/11/aspnet-gridview.html
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |