自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用TemplateField顯示GridView中數(shù)據(jù)的元數(shù)據(jù)

開發(fā) 后端
本文介紹了TemplateField的第三種用法。

第三種TemplateField的用法是,顯示GridView中數(shù)據(jù)的元數(shù)據(jù)。比如說,除了顯示雇員的受雇日期,我們可能還希望用一列來顯示這個雇員在公司干了多久。 

另外還有一種用法,它將在某些情況下需要用到,比如說在頁面上某個數(shù)據(jù)的顯示格式需要用一種不同于其在數(shù)據(jù)庫中的存儲格式的時候。想象一下,雇員表中有一個性別字段,其中存儲了M或是F這樣的字符用于表示此雇員是男的還是女的。當(dāng)我們需要將這個信息顯示在頁面上的時候,我們可能希望能夠?qū)⑵滹@示為“男”或“女”而不是“M”或“F”。 

這兩種用法都可以采用在ASP.NET頁面的后置代碼類(或者是在一個獨立的類庫中,將其實現(xiàn)為一個靜態(tài)方法)創(chuàng)建一個供模板調(diào)用的格式化方法(formatting method)來做到。這樣的格式化方法將在模板中調(diào)用,語法跟前面的數(shù)據(jù)綁定語法是一樣的。格式化方法可以接受若干個參數(shù),但是必須返回一個字符串。這個返回的字符串是一個用于插入到模板中的HTML。 

讓我們增加一點內(nèi)容來說明這個概念。主要是增加一列以顯示雇員在公司干活的天數(shù)。這個格式化方法接受一個Northwind.EmployeesRow對象,然后返回以字符串的形式返回這個雇員在公司干活的天數(shù)。這個方法可以添加到ASP.NET頁面的后置代碼類中,不過一定要記得將其標(biāo)記為protected或public,不然模板就訪問不到它了。 

  1. protected string DisplayDaysOnJob(Northwind.EmployeesRow employee)  
  2. {  
  3.     // 確保HiredDate不為空……如果為空的話,返回“Unknown”  
  4.     if (employee.IsHireDateNull())  
  5.         return "Unknown";  
  6.     else 
  7.     {  
  8.         // 返回當(dāng)前日期/時間與HireDate之間所隔的天數(shù)   
  9.         TimeSpan ts = DateTime.Now.Subtract(employee.HireDate);  
  10.        return ts.Days.ToString("#,##0");  
  11.    }  

由于HiredDate可能會含有空值,所以我們必須在進(jìn)行計算之前首先保證其值不為空。如果HiredDate值為空的話,直接返回一個“Unknown”就是了;如果不為空的話呢,就計算當(dāng)前時間跟HiredDate的值之間所隔的天數(shù),并把它作為一個字符串返回即可。

要使用這個方法,我們需要在GridView的TemplateField中使用數(shù)據(jù)綁定語法來調(diào)用它。同樣,我們還是先給GridView添加一個新的模板列。

 

TemplateField:給GridView添加一個新的模板列

將這個新的模板列的頁眉文本(HeaderText)設(shè)置成“Days on the Job”,并將其ItemStyle的水平對齊(HorizontalAlign)設(shè)置為居中(Center)。要調(diào)用DisplayDaysOnJob方法,我們需要給這個模板列添加一個ItemTemplate并加上如下的數(shù)據(jù)綁定代碼: 

  1. < %# DisplayDaysOnJob((Northwind.EmployeesRow) ((System.Data.DataRowView) Container.DataItem).Row) %>    

Container.DataItem返回數(shù)據(jù)源對象中的一個相應(yīng)的DataRowView對象給GridView。它的Row屬性返回一個強(qiáng)類型化的Nothwind.EmployeesRow,然后再將其傳遞給DisplayDaysOnJob方法。這個數(shù)據(jù)綁定語法可以直接出現(xiàn)再ItemTemplate(就像下面的代碼中那樣)中或是賦值給Label控件的Text屬性。 

注意:除了傳遞一個EmployeesRow的實例,其實我們也可以僅僅傳遞HireDate的值,使用< %# DisplayDaysOnJob(Eval("HireDate")) %>就可以了。不過呢,Eval方法將返回一個object類型,所以我們就必須要修改DisplayDaysOnJob方法的簽名以使其可以接受一個object類型的參數(shù)。我們不能將Eval("HireDate")調(diào)用的結(jié)果隱式的轉(zhuǎn)換成一個DateTime類型,因為Employees表的HireDate字段是允許為空的。因此,我們需要使DisplayDaysOnJob方法可以接受一個object類型的參數(shù),并判斷這個參數(shù)是不是空值(我們可以使用Convert.IsDBNull(objectToCheck)來完成這個驗證工作),然后再進(jìn)行后面的操作。 

就是因為這個,所以我還是選擇了傳遞整個EmployeesRow實例。在下一節(jié)教程中,我們會看到一個更加合適使用Eval("columnName")來傳遞參數(shù)給格式化方法的例子。 

在給我們的GridView添加了模板列并在ItemTemplate中添加了調(diào)用DisplayDaysOnJob方法的代碼后,聲明代碼應(yīng)該是這個樣子: 

  1. < asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"   
  2. DataKeyNames="EmployeeID" 
  3.     DataSourceID="ObjectDataSource1">  
  4.      < Columns>  
  5.          < asp:TemplateField HeaderText="Name" SortExpression="FirstName">  
  6.              < EditItemTemplate>  
  7.                  < asp:TextBox ID="TextBox1" runat="server" Text='< %# Bind("FirstName") %>'>  
  8. < /asp:TextBox>  
  9.              < /EditItemTemplate>  
  10.              < ItemTemplate>  
  11.                  < asp:Label ID="Label1" runat="server" Text='< %# Bind("FirstName") %>'>< /asp:Label>  
  12.                 < asp:Label ID="Label2" runat="server" Text='< %# Eval("LastName") %>'>< /asp:Label>  
  13.             < /ItemTemplate>  
  14.         < /asp:TemplateField>  
  15.         < asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />  
  16.         < asp:TemplateField HeaderText="HireDate" SortExpression="HireDate">  
  17.             < EditItemTemplate>  
  18.                 < asp:TextBox ID="TextBox2" runat="server" Text='< %# Bind("HireDate") %>'>  
  19. < /asp:TextBox>  
  20.             < /EditItemTemplate>  
  21.             < ItemTemplate>  
  22.                 < asp:Calendar ID="Calendar1" runat="server" SelectedDate='< %# Bind("HireDate") %>' 
  23.                     VisibleDate='< %# Eval("HireDate") %>'>< /asp:Calendar>  
  24.             < /ItemTemplate>  
  25.         < /asp:TemplateField>  
  26.         < asp:TemplateField HeaderText="Days On The Job">  
  27.             < ItemTemplate>  
  28.                 < %# DisplayDaysOnJob((Northwind.EmployeesRow) ((System.Data.DataRowView)  
  29.  Container.DataItem).Row) %>  
  30.             < /ItemTemplate>  
  31.             < ItemStyle HorizontalAlign="Center" />  
  32.         < /asp:TemplateField>  
  33.     < /Columns>  
  34. < /asp:GridView> 

完成了整節(jié)教程之后,頁面在瀏覽器中的樣子應(yīng)該是圖十六的這個樣子。

“雇員在公司干了多久”也顯示出來了 

TemplateField:“雇員在公司干了多久”也顯示出來了 

【編輯推薦】

  1. 使用ASP.NET DetailsView顯示詳細(xì)信息
  2. 熟悉DropDownList和ObjectDataSource的配合使用
  3. ASP.NET DropDownList的創(chuàng)建與填充
  4. 使用ASP.NET中的GridView和ObjectDataSource
  5. ASP.NET DropDownList使用范例

責(zé)任編輯:book05 來源: 博客園
相關(guān)推薦

2009-07-28 08:36:45

TemplateFie

2009-07-27 16:09:05

GridView顯示數(shù)

2009-07-28 08:24:16

GridView綁定數(shù)

2021-09-01 10:37:25

鴻蒙HarmonyOS應(yīng)用

2009-07-28 03:42:00

ASP.NET Gri

2009-07-01 09:43:40

WCF安全元數(shù)據(jù)

2021-09-01 14:36:14

鴻蒙HarmonyOS應(yīng)用

2016-10-27 13:40:02

編程語言 數(shù)據(jù)庫

2010-10-21 14:12:07

SQL Server游

2022-03-16 11:03:40

數(shù)據(jù)庫元數(shù)據(jù)數(shù)據(jù)引擎

2009-11-09 17:17:31

WCF元數(shù)據(jù)交換

2023-05-11 08:37:46

LinuxSpring MVC

2020-10-29 06:02:44

PythonPandasExcel

2024-01-02 13:16:00

數(shù)據(jù)遷移PythonPETL

2022-05-06 14:50:54

元宇宙數(shù)據(jù)安全數(shù)據(jù)隱私

2022-06-16 08:00:00

元數(shù)據(jù)數(shù)據(jù)中心數(shù)據(jù)架構(gòu)

2018-03-12 08:17:27

分布式存儲

2023-10-30 15:28:51

數(shù)據(jù)倉庫

2023-04-14 15:50:29

元數(shù)據(jù)數(shù)據(jù)治理

2024-09-21 09:55:57

點贊
收藏

51CTO技術(shù)棧公眾號