溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發(fā)布時間:2021-07-15 11:33:48 來源:億速云 閱讀:124 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“如何利用TemplateField顯示GridView中數(shù)據(jù)的元數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何利用TemplateField顯示GridView中數(shù)據(jù)的元數(shù)據(jù)”吧!

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

另外還有一種用法,它將在某些情況下需要用到,比如說在頁面上某個數(shù)據(jù)的顯示格式需要用一種不同于其在數(shù)據(jù)庫中的存儲格式的時候。想象一下,雇員表中有一個性別字段,其中存儲了M或是F這樣的字符用于表示此雇員是男的還是女的。當我們需要將這個信息顯示在頁面上的時候,我們可能希望能夠?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頁面的后置代碼類中,不過一定要記得將其標記為protected或public,不然模板就訪問不到它了。

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

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

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

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

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

    

Container.DataItem返回數(shù)據(jù)源對象中的一個相應的DataRowView對象給GridView。它的Row屬性返回一個強類型化的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)來完成這個驗證工作),然后再進行后面的操作。

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

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

< asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"   DataKeyNames="EmployeeID"     DataSourceID="ObjectDataSource1">                  < asp:TemplateField HeaderText="Name" SortExpression="FirstName">                                  < asp:TextBox ID="TextBox1" runat="server" Text=''>                                                   < asp:Label ID="Label1" runat="server" Text=''>                  < asp:Label ID="Label2" runat="server" Text=''>                                  < asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />          < asp:TemplateField HeaderText="HireDate" SortExpression="HireDate">                                < asp:TextBox ID="TextBox2" runat="server" Text=''>                                                < asp:Calendar ID="Calendar1" runat="server" SelectedDate=''                     VisibleDate=''>                                  < asp:TemplateField HeaderText="Days On The Job">                                < %# DisplayDaysOnJob((Northwind.EmployeesRow) ((System.Data.DataRowView)   Container.DataItem).Row) %>                            < ItemStyle HorizontalAlign="Center" />

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

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

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

到此,相信大家對“如何利用TemplateField顯示GridView中數(shù)據(jù)的元數(shù)據(jù)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI