中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


導(dǎo)言

GridView是由一組字段(Field)組成的,它們都指定的了來自DataSource中的什么屬性需要用到自己的輸出呈現(xiàn)中。最簡(jiǎn)單的字段類型是BoundField,它僅將數(shù)據(jù)簡(jiǎn)單的顯示為文本。其他的字段類型使用交互HTML元素(alternate HTML elements)來顯示數(shù)據(jù)。比如說,CheckBoxField將被呈現(xiàn)為一個(gè)CheckBox,其選中狀態(tài)由某特定數(shù)據(jù)字段的值來決定;ImageField則將某特定數(shù)據(jù)字段呈現(xiàn)為一個(gè)圖片,當(dāng)然,這個(gè)數(shù)據(jù)字段中應(yīng)該放的是圖片類型的數(shù)據(jù)。超級(jí)鏈接和按鈕的狀態(tài)取決于使用HyperLinkField或ButtonField字段類型的數(shù)據(jù)字段的值。

 

雖然CheckBoxField、ImageField、HyperLinkField和ButtonField考慮到了數(shù)據(jù)的交互視圖,但它們?nèi)匀挥幸恍┫嚓P(guān)的格式化的限制。CheckBoxField只可以顯示為一個(gè)單個(gè)的CheckBox,而一個(gè)ImageField則只可以顯示為一張圖片。如果某個(gè)字段要顯示一些文本、復(fù)選框、圖片還有一些其他基于不同數(shù)據(jù)的東西的時(shí)候,我們要做什么?或者說,如果我們需要使用除了CheckBox、Image、HyperLink以及Button之外的Web控件來顯示數(shù)據(jù)時(shí),我們?cè)撛趺崔k?此外,BoundField只能顯示一個(gè)單獨(dú)的數(shù)據(jù)字段。如果我們想要在一個(gè)GridView列中顯示兩個(gè)或者更多的數(shù)據(jù)字段的值的時(shí)候該怎么辦呢?

 

為了適應(yīng)這樣的一個(gè)復(fù)雜的情況,GridView提供了使用模板來進(jìn)行呈現(xiàn)的TemplateField。模板可以包括靜態(tài)的HTML、Web控件以及數(shù)據(jù)綁定的代碼。此外,TemplateField還擁有各種可以用于不同情況的頁(yè)面呈現(xiàn)的模板。比如說,ItemTemplate是默認(rèn)的用于呈現(xiàn)每行中的單元格的,而EditItemTemplate則用于編輯數(shù)據(jù)時(shí)的自定義界面。

 

在本節(jié)教程中,我們將解釋如何使用TemplateField來更加高級(jí)的自定義GridView控件。在上一節(jié)教程中,我們看到了如何使用DataBound和RowDataBound事件處理方法來自定義基于數(shù)據(jù)的格式化。另一個(gè)辦法就是在模板中調(diào)用一個(gè)格式化方法。在本節(jié)中,我們就會(huì)看到這種技術(shù)。

 

在本節(jié)中,我們將使用一些TemplateField來自定義雇員信息的呈現(xiàn)。特別的,我們將列出所有的雇員,但我們將會(huì)把雇員的姓和名字放在一列中,把他們的雇傭日期放在一個(gè)Calendar控件中,還將用一個(gè)狀態(tài)列來表明他們來到公司有多久了。

 

圖一:使用三個(gè)TemplateField來自定義信息的顯示方式

 

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


第一步:將數(shù)據(jù)綁定到GridView

當(dāng)你需要使用一些TemplateField來自定義顯示時(shí),我發(fā)現(xiàn)最簡(jiǎn)單的就是先創(chuàng)建一個(gè)僅包含BoundField的GridView控件,然后添加一些TemplateField,如果需要的話,也可以將某些BoundField直接轉(zhuǎn)換成TemplateField。好了,讓我們開始本節(jié)教程吧。首先,通過設(shè)計(jì)器往頁(yè)面上添加一個(gè)GridView控件,并將一個(gè)返回雇員信息的ObjectDataSource綁定到它上面。這些步驟將創(chuàng)建一個(gè)帶有一些BoundField的GridView,這些BoundField對(duì)應(yīng)雇員信息中不同的字段。

 

打開GridViewTemplateField.ASPx,并從工具箱中拖一個(gè)GridView到設(shè)計(jì)器上。從GridView的智能標(biāo)簽(smart tag)上選擇并添加一個(gè)新的調(diào)用EmployeesBLL 類的GetEmployees()方法的ObjectDataSource控件。



圖二:添加一個(gè)新的調(diào)用GetEmployees()方法的ObjectDataSource控件

用這種方式綁定GridView將會(huì)自動(dòng)的為雇員信息的每一個(gè)屬性添加一個(gè)BoundField:EmployeeID、LastName、FirstName、Title、HireDate、ReportsTo以及Country。在這個(gè)報(bào)表中,我們不希望看到EmployeeID、ReportsTo以及Country屬性。要?jiǎng)h除這些BoundField的話,你可以:

 

·     使用字段對(duì)話框 - 在GridView的智能標(biāo)簽的彈出菜單中點(diǎn)擊“編輯列”(Edit Columns)。然后,在左下角的列表中選中你想要?jiǎng)h除的BoundField并點(diǎn)擊那個(gè)帶紅叉的按鈕,就可以刪除這個(gè)BoundField了。

·     手工編輯GridView的聲明語(yǔ)句 - 在源視圖(Source view)中,找到你想要?jiǎng)h除的BoundField,就是那些<ASP:BoundField>元素,刪了就行了。

 

在你刪了EmployeeID、ReportsTo和Country等BoundField之后,你的GridView的標(biāo)記語(yǔ)言代碼應(yīng)該像這個(gè)樣子:

 

 1<ASP:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID"
 2    DataSourceID="ObjectDataSource1">
 3    <Columns>
 4        <ASP:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
 5        <ASP:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
 6        <ASP:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
 7        <ASP:BoundField DataField="HireDate" HeaderText="HireDate" SortExpression="HireDate" />
 8    </Columns>
 9</ASP:GridView>
10

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField



第二步:將姓和名顯示在一列中

現(xiàn)在,每一個(gè)雇員的姓和名都是分開在兩列中顯示的。把它們放到一個(gè)列中顯示出來也許是一個(gè)不錯(cuò)的主意。要做到這一點(diǎn),我們需要用到TemplateField。我們可以添加一個(gè)新的TemplateField,給它加上一些必須的標(biāo)記語(yǔ)言和數(shù)據(jù)綁定代碼,然后刪除原來的FirstName和 LastName這兩個(gè)BoundField;當(dāng)然,我們也可以將FirstName這個(gè)BoundField直接轉(zhuǎn)換成一個(gè)TemplateField,編輯它以加上LastName的值,然后再刪除LastName這個(gè)BoundField。

 

兩種辦法都行,不過我個(gè)人還是比較喜歡直接轉(zhuǎn)換的那種,因?yàn)檫@種方式可以自動(dòng)的添加一個(gè)含有Web控件和相應(yīng)的數(shù)據(jù)綁定代碼的ItemTemplate和EditItemTemplate,它們可以用來模仿一個(gè)BoundField的呈現(xiàn)和功能。這樣做的好處自然是不言而喻的,因?yàn)檗D(zhuǎn)換的過程已經(jīng)幫我們做了很多事情,那我們當(dāng)然就可以節(jié)約不少的時(shí)間了。

 

要將一個(gè)BoundField轉(zhuǎn)換成TemplateField,我們可以在GridView的智能標(biāo)簽的彈出菜單中點(diǎn)擊“編輯列”(Edit Columns)。在彈出對(duì)話框的左下角的列表中選擇需要轉(zhuǎn)換的BoundField,然后點(diǎn)擊右下角的“將此列轉(zhuǎn)換成模板列”(Convert this field into a TemplateField)即可。


圖四:在字段對(duì)話框中,將一個(gè)綁定列轉(zhuǎn)換成一個(gè)模板列

 

讓我們繼續(xù)將FirstName這個(gè)BoundField轉(zhuǎn)換成TemplateField。在這個(gè)更改之后,設(shè)計(jì)器中并沒有什么明顯的不同。這是因?yàn)閷oundField轉(zhuǎn)換成TemplateField時(shí),其實(shí)是創(chuàng)建了一個(gè)維持之前的BoundField的外觀和感覺的TemplateField。盡管在設(shè)計(jì)器中沒有視覺上的變化,但是這個(gè)轉(zhuǎn)換的過程已經(jīng)將BoundField的聲明代碼——<ASP:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />——改成了如下所示的TemplateField的聲明代碼:

 

1<ASP:TemplateField HeaderText="FirstName" SortExpression="FirstName">
2    <EditItemTemplate>
3        <ASP:TextBox ID="TextBox1" runat="server" Text='<%# Bind("FirstName") %>'></ASP:TextBox>
4    </EditItemTemplate>
5    <ItemTemplate>
6        <ASP:Label ID="Label1" runat="server" Text='<%# Bind("FirstName") %>'></ASP:Label>
7    </ItemTemplate>
8</ASP:TemplateField>
9

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


就像你看到的那樣,TemplateField由兩個(gè)模板組成——一個(gè)ItemTemplate,它有一個(gè)Label控件,其Text屬性被設(shè)置為FirstName數(shù)據(jù)字段的值;還有一個(gè)EditItemTemplate,它有一個(gè)TextBix控件,其Text屬性也被設(shè)置為FirstName數(shù)據(jù)字段的值。數(shù)據(jù)綁定語(yǔ)法——

<%# Bind("fieldName") %>——說明數(shù)據(jù)字段fieldName 被綁定到了這個(gè)特定的Web控件的屬性上。

 

要將LastName添加到TemplateField中,我們需要為ItemTemplate添加一個(gè)Label控件并將其Text屬性綁定到LastName上。通過設(shè)計(jì)器或是手工編寫代碼都可以做到這一點(diǎn)。要手工寫代碼的話,只需簡(jiǎn)單的將相應(yīng)的聲明代碼添加到ItemTemplate中即可,如下所示:

 

 1<ASP:TemplateField HeaderText="FirstName" SortExpression="FirstName">
 2    <EditItemTemplate>
 3        <ASP:TextBox ID="TextBox1" runat="server" Text='<%# Bind("FirstName") %>'></ASP:TextBox>
 4    </EditItemTemplate>
 5    <ItemTemplate>
 6        <ASP:Label ID="Label1" runat="server" Text='<%# Bind("FirstName") %>'></ASP:Label>
 7        <ASP:Label ID="Label2" runat="server" Text='<%# Bind("LastName") %>'></ASP:Label>
 8    </ItemTemplate>
 9</ASP:TemplateField>
10

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


要在FirstName模板列中同時(shí)顯示LastName,從工具箱中拖一個(gè)Label到FirstName模板列的ItemTemplate中即可,當(dāng)然,這要在GridView的模板編輯界面中才行的,如下圖所示:


圖六:向FirstName模板列的ItemTemplate中添加一個(gè)Label

 

現(xiàn)在,添加到TemplateField的Label控件的Text屬性還是“Label”。我們需要修改這個(gè)以使這個(gè)屬性綁定到數(shù)據(jù)源中的LastName字段上。我們可以通過在Label控件的智能標(biāo)記上點(diǎn)擊一下,然后在彈出菜單中選擇“編輯數(shù)據(jù)綁定”( Edit DataBindings)選項(xiàng),如下圖所示:


圖七:從Label的智能標(biāo)簽上選擇Edit DataBindings選項(xiàng)

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


在彈出的數(shù)據(jù)綁定對(duì)話框中,你可以在左邊的列表中選擇需要綁定的屬性,然后在右邊的下來框中選擇一個(gè)數(shù)據(jù)字段。好了,我們現(xiàn)在在左邊選擇Text屬性,然后在右邊選擇LastName字段,點(diǎn)擊OK。

圖八:將Text屬性綁定到LastName字段上

 

注意:數(shù)據(jù)綁定對(duì)話框允許你聲明一個(gè)雙向的數(shù)據(jù)綁定。如果你保持“雙向數(shù)據(jù)綁定” (Two-way databinding)這個(gè)復(fù)選框?yàn)槲催x中的話,數(shù)據(jù)綁定的代碼將會(huì)是<%# Eval("LastName")%>而不是<%# Bind("LastName")%>。不過,對(duì)于本節(jié)教程來說,兩個(gè)種做法的效果都是OK的。雙向數(shù)據(jù)綁定在插入和編輯數(shù)據(jù)的時(shí)候?qū)?huì)比較重要。但是如果僅僅是簡(jiǎn)單的顯示數(shù)據(jù)的話,兩種做法都是一樣的。我們將在今后的章節(jié)中詳細(xì)的討論一下雙向數(shù)據(jù)綁定。

 

讓我們?cè)倩ㄒ恍r(shí)間到瀏覽器中看看這個(gè)頁(yè)面。就像你看到的那樣,GridView仍然包含4列,不過,F(xiàn)irstName列里面顯示了姓和名兩個(gè)數(shù)據(jù)。



圖九:姓和名顯示在同一列里面了

 

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


要完成這一步,我們先刪除LastName這個(gè)綁定列,并將FirstName這個(gè)模板列的列頭文本(HeaderText)改成“Name”。在這之后,GridView的聲明代碼將會(huì)像下面這樣:


 1<ASP:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames
="EmployeeID"
 2    DataSourceID="ObjectDataSource1">
 3    <Columns>
 4        <ASP:TemplateField HeaderText="Name" SortExpression="FirstName">
 5            <EditItemTemplate>
 6                <ASP:TextBox ID="TextBox1" runat="server" Text='<%# Bind("FirstName") %>'>
</
ASP:TextBox>
 7            </EditItemTemplate>
 8            <ItemTemplate>
 9                <ASP:Label ID="Label1" runat="server" Text='<%# Bind("FirstName") %>'></ASP:Label>
10                <ASP:Label ID="Label2" runat="server" Text='<%# Eval("LastName") %>'></ASP:Label>
11            </ItemTemplate>
12        </ASP:TemplateField>
13        <ASP:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
14        <ASP:BoundField DataField="HireDate" HeaderText="HireDate" SortExpression="HireDate" />
15    </Columns>
16</ASP:GridView>
17

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField



第三步:使用Calendar控件顯示HiredDate字段

在GridView中將數(shù)據(jù)顯示為文本的話,只需要簡(jiǎn)單的使用BoundField就可以了。然而,在某些特定的場(chǎng)合,數(shù)據(jù)最好是展示為一個(gè)特殊的Web控件而不是一個(gè)簡(jiǎn)單的文本。這樣的自定義的數(shù)據(jù)顯示就可以用TemplateField來做。比如說,比起將雇員的雇傭日期顯示成文本來說,我們覺得將其高亮的顯示在一個(gè)Calendar(使用Calendar控件)中會(huì)更爽一些。

 

 

要做到這一點(diǎn),先將HiredDate這個(gè)綁定列轉(zhuǎn)換成一個(gè)模板列。像之前做的那樣轉(zhuǎn)換就是了,大家應(yīng)該還沒有忘記吧?在GridView的智能標(biāo)簽?zāi)抢锵率志涂梢粤恕?/p>



圖十一:將HiredDate綁定列轉(zhuǎn)換成一個(gè)模板列

 

就像我們?cè)诘诙街锌吹降哪菢樱@個(gè)操作會(huì)將綁定列替換成一個(gè)含有ItemTemplate和EditItemTemplate的模板列,其中的ItemTemplate和EditItemTemplate分別帶有一個(gè)Label和一個(gè)TextBox,而這個(gè)Label和TextBox的Text屬性都使用了數(shù)據(jù)綁定語(yǔ)句<%# Bind("HiredDate")%>來將HireDate綁定到自己身上。

 

要用Calendar控件來替換這個(gè)文本的話,我們可以編輯模板:刪除Label控件,并添加上一個(gè)Calendar控件。在設(shè)計(jì)器中,從GridView的智能標(biāo)簽的彈出菜單中選擇“編輯模板”(Edit Templates),并在下拉列表中選擇HireDate模板列的ItemTemplate。然后,刪除Label控件并從工具箱中拖一個(gè)Calendar控件到模板編輯界面中。



圖十二:給HireDate模板列的ItemTemplate添加一個(gè)Calendar控件

 

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


這個(gè)時(shí)候,GridView中每一行的HireDate模板列都會(huì)包含一個(gè)Calendar控件。不過,雇員的實(shí)際雇傭日期還沒有設(shè)置到Calendar控件上,這就讓Calendar控件默認(rèn)的顯示為當(dāng)前的日期。我們可以通過將雇員的HireDate賦值給Calendar控件的SelectedDateVisibleDate屬性來修正這個(gè)問題。

 

從Calendar控件的智能標(biāo)簽中選擇“編輯數(shù)據(jù)綁定”。然后,把SelectedDate和VisibleDate這兩個(gè)屬性都綁定到HireDate字段上。


圖十三:將SelectedDate和VisibleDate都綁定到HireDate字段上

 

注意:Calendar控件的選定日期不一定要可見。舉個(gè)例子來說,某個(gè)Calendar控件的選定日期為1999年4月1日,但卻顯示的是現(xiàn)在的年月。選定日期和可見日期是由Calendar控件的SelectedDate和VisibleDate屬性來指定的。因?yàn)槲覀儾粌H希望選中雇員的HireDate,還希望它是可見的,那么我們就需要將這兩個(gè)屬性都綁定到HireDate字段上。

 

現(xiàn)在,我們?cè)俚綖g覽器中看看這個(gè)頁(yè)面,Calendar現(xiàn)在顯示的是雇員的雇員受雇日期的月份并選中了一個(gè)指定的日期。



圖十四:雇員的受雇日期顯示到了Calendar控件上

 

注意: 和我們一直所見到的那些例子相反,在本節(jié)教程中我們并沒有將GridView的EnableViewState屬性設(shè)置為false。這樣做的原因是,在Calendar控件上的點(diǎn)擊將會(huì)產(chǎn)生一個(gè)回發(fā)(PostBack),并將Calendar的選定日期設(shè)置為剛才所點(diǎn)擊的那個(gè)日期。如果禁用了GridView的ViewState,那么每一次回發(fā)都將導(dǎo)致GridView使用原來的數(shù)據(jù)重新綁定,這樣Calendar的選定日期就會(huì)變成原來的雇員受雇日期。

 

在本教程中,這是一個(gè)沒有意義的議題,因?yàn)橛脩舯緛砭筒粦?yīng)該可以修改雇員的受雇日期。可能直接配置Calendar控件為不可選是最好的辦法。不過不管怎么說,在本教程中可以看到,某些情況下還是將控件的ViewState啟用才能提供某些特定的功能的。

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


 

 

第四步:顯示雇員在公司工作了多少天

到現(xiàn)在,我們已經(jīng)看到了TemplateField的兩個(gè)應(yīng)用

 

·         將兩個(gè)數(shù)據(jù)合并到一個(gè)列中

·         用一個(gè)Web控件來展示數(shù)據(jù),而不是用一個(gè)簡(jiǎn)單的文本

 

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

 

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

 

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

 

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

 

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

系列文章導(dǎo)航:

ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問層

ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層

ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航

ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)

ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)

ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值

ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過濾的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表

ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化

ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField


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

 

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

NET技術(shù)ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品久久久久久久久久久久久 | 黄色综合| 男人的天堂在线视频 | 欧美色影院 | 国产成人综合在线 | 91久久国产综合久久 | 午夜不卡一区二区 | 久久免费精品视频 | 日本免费一区二区三区四区 | 国产精品美女久久久久久免费 | 亚洲狠狠丁香婷婷综合久久久 | 精品亚洲一区二区三区四区五区高 | 中文字幕日韩欧美一区二区三区 | 久久亚洲欧美日韩精品专区 | 国产一区二区精品在线观看 | 国产视频中文字幕 | 国产成人久久精品一区二区三区 | 精品国产乱码久久久久久丨区2区 | 久久狠狠 | 亚洲精品久久久久久久不卡四虎 | 日本视频在线播放 | 成人精品视频在线观看 | 国产精品一二区 | 国产特级毛片aaaaaa喷潮 | 国产日韩欧美中文字幕 | 国产精品久久久久久久久久久久久久 | 国内久久 | 精品在线播放 | 美女在线一区二区 | 久久99精品久久久久久琪琪 | 欧美久久久久久久久 | 午夜精品三区 | 中文字幕久久精品 | 国产又爽又黄的视频 | 日韩av在线免费 | 91网视频 | 久久久久久久久久久福利观看 | 国产在线视频一区二区 | 成人午夜| 国产91亚洲精品一区二区三区 | 亚洲欧美日韩精品久久亚洲区 |