午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁(yè) > 知識(shí)庫(kù) > 在ASP.NET 2.0中操作數(shù)據(jù)之十二:在GridView控件中使用TemplateField

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

熱門標(biāo)簽:百應(yīng)電話機(jī)器人外呼系統(tǒng) 外呼電話機(jī)器人成本 聯(lián)通官網(wǎng)400電話辦理 西寧呼叫中心外呼系統(tǒng)線路商 臨沂智能電話機(jī)器人加盟 地圖標(biāo)注軟件免費(fèi)下載 蘇州如何辦理400電話 400電話辦理怎么樣 網(wǎng)絡(luò)電話外呼系統(tǒng)上海

導(dǎo)言

  GridView是由一組字段(Field)組成的,它們都指定的了來(lái)自DataSource中的什么屬性需要用到自己的輸出呈現(xiàn)中。最簡(jiǎn)單的字段類型是BoundField,它僅將數(shù)據(jù)簡(jiǎn)單的顯示為文本。其他的字段類型使用交互HTML元素(alternate HTML elements)來(lái)顯示數(shù)據(jù)。比如說(shuō),CheckBoxField將被呈現(xiàn)為一個(gè)CheckBox,其選中狀態(tài)由某特定數(shù)據(jù)字段的值來(lái)決定;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í)候,我們要做什么?或者說(shuō),如果我們需要使用除了CheckBox、Image、HyperLink以及Button之外的Web控件來(lái)顯示數(shù)據(jù)時(shí),我們?cè)撛趺崔k?此外,BoundField只能顯示一個(gè)單獨(dú)的數(shù)據(jù)字段。如果我們想要在一個(gè)GridView列中顯示兩個(gè)或者更多的數(shù)據(jù)字段的值的時(shí)候該怎么辦呢?

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

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

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

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

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

  當(dāng)你需要使用一些TemplateField來(lái)自定義顯示時(shí),我發(fā)現(xiàn)最簡(jiǎn)單的就是先創(chuàng)建一個(gè)僅包含BoundField的GridView控件,然后添加一些TemplateField,如果需要的話,也可以將某些BoundField直接轉(zhuǎn)換成TemplateField。好了,讓我們開始本節(jié)教程吧。首先,通過(guò)設(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è)樣子:

asp:GridView ID="GridView1" runat="server"
 AutoGenerateColumns="False" DataKeyNames="EmployeeID"
 DataSourceID="ObjectDataSource1">
 Columns>
 asp:BoundField DataField="LastName" HeaderText="LastName"
  SortExpression="LastName" />
 asp:BoundField DataField="FirstName" HeaderText="FirstName"
  SortExpression="FirstName" />
 asp:BoundField DataField="Title" HeaderText="Title"
  SortExpression="Title" />
 asp:BoundField DataField="HireDate" HeaderText="HireDate"
  SortExpression="HireDate" />
 /Columns>
/asp:GridView>

  讓我們花點(diǎn)時(shí)間在瀏覽器中來(lái)看看我們的成果。這時(shí),你將看到一個(gè)表格,表格中每一個(gè)記錄都是一個(gè)雇員的信息,一共有四列:一個(gè)是雇員的姓,一個(gè)是名字,一個(gè)是頭銜,還有一個(gè)是他們的受雇日期。

圖三:每一個(gè)雇員信息都顯示了LastName、FirstName、Title和HireDate

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

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

  兩種辦法都行,不過(guò)我個(gè)人還是比較喜歡直接轉(zhuǎn)換的那種,因?yàn)檫@種方式可以自動(dòng)的添加一個(gè)含有Web控件和相應(yīng)的數(shù)據(jù)綁定代碼的ItemTemplate和EditItemTemplate,它們可以用來(lái)模仿一個(gè)BoundField的呈現(xiàn)和功能。這樣做的好處自然是不言而喻的,因?yàn)檗D(zhuǎn)換的過(guò)程已經(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)換的過(guò)程已經(jīng)將BoundField的聲明代碼——asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />——改成了如下所示的TemplateField的聲明代碼:

asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
 EditItemTemplate>
 asp:TextBox ID="TextBox1" runat="server"
  Text='%# Bind("FirstName") %>'>/asp:TextBox>
 /EditItemTemplate>
 ItemTemplate>
 asp:Label ID="Label1" runat="server"
  Text='%# Bind("FirstName") %>'>/asp:Label>
 /ItemTemplate>
/asp: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") %>——說(shuō)明數(shù)據(jù)字段fieldName 被綁定到了這個(gè)特定的Web控件的屬性上。

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

asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
 EditItemTemplate>
 asp:TextBox ID="TextBox1" runat="server"
  Text='%# Bind("FirstName") %>'>/asp:TextBox>
 /EditItemTemplate>
 ItemTemplate>
 asp:Label ID="Label1" runat="server"
  Text='%# Bind("FirstName") %>'>/asp:Label>
 asp:Label ID="Label2" runat="server"
  Text='%# Bind("LastName") %>'>/asp:Label>
 /ItemTemplate>
/asp:TemplateField>

  要通過(guò)設(shè)計(jì)器來(lái)添加的話,還是在GridView的智能標(biāo)簽的彈出菜單中點(diǎn)擊“編輯列”( Edit Templates)。這樣會(huì)顯示GridView的模板編輯界面。在這個(gè)界面中,智能標(biāo)簽是GridView中模板的列表。因?yàn)檫@個(gè)時(shí)候我們只有一個(gè)TemplateField,所以下拉列表中只有FirstName的各種模板和EmptyDataTemplate以及PagerTemplate。

  如果指定了EmptyDataTemplate模板的話,它將用于綁定到GridView的數(shù)據(jù)源中沒有任何記錄時(shí)的輸出呈現(xiàn);如果指定了PagerTemplate,它將用于呈現(xiàn)GridView的分頁(yè)界面。

圖五:GridView的模板列可以通過(guò)設(shè)計(jì)器來(lái)編輯

  要在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字段上。我們可以通過(guò)在Label控件的智能標(biāo)記上點(diǎn)擊一下,然后在彈出菜單中選擇“編輯數(shù)據(jù)綁定”( Edit DataBindings)選項(xiàng),如下圖所示:

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

  在彈出的數(shù)據(jù)綁定對(duì)話框中,你可以在左邊的列表中選擇需要綁定的屬性,然后在右邊的下來(lái)框中選擇一個(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")%>。不過(guò),對(duì)于本節(jié)教程來(lái)說(shuō),兩個(gè)種做法的效果都是OK的。雙向數(shù)據(jù)綁定在插入和編輯數(shù)據(jù)的時(shí)候?qū)?huì)比較重要。但是如果僅僅是簡(jiǎn)單的顯示數(shù)據(jù)的話,兩種做法都是一樣的。我們將在今后的章節(jié)中詳細(xì)的討論一下雙向數(shù)據(jù)綁定。

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

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

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

asp:GridView ID="GridView1" runat="server"
 AutoGenerateColumns="False" DataKeyNames="EmployeeID"
 DataSourceID="ObjectDataSource1">
 Columns>
 asp:TemplateField HeaderText="Name" SortExpression="FirstName">
  EditItemTemplate>
  asp:TextBox ID="TextBox1" runat="server"
   Text='%# Bind("FirstName") %>'>/asp:TextBox>
  /EditItemTemplate>
  ItemTemplate>
  asp:Label ID="Label1" runat="server"
   Text='%# Bind("FirstName") %>'>/asp:Label>
  asp:Label ID="Label2" runat="server"
   Text='%# Eval("LastName") %>'>/asp:Label>
  /ItemTemplate>
 /asp:TemplateField>
 asp:BoundField DataField="Title" HeaderText="Title"
  SortExpression="Title" />
 asp:BoundField DataField="HireDate" HeaderText="HireDate"
  SortExpression="HireDate" />
 /Columns>
/asp:GridView>

圖十:每一個(gè)雇員的姓和名都顯示在同一列里面了

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

  在GridView中將數(shù)據(jù)顯示為文本的話,只需要簡(jiǎn)單的使用BoundField就可以了。然而,在某些特定的場(chǎng)合,數(shù)據(jù)最好是展示為一個(gè)特殊的Web控件而不是一個(gè)簡(jiǎn)單的文本。這樣的自定義的數(shù)據(jù)顯示就可以用TemplateField來(lái)做。比如說(shuō),比起將雇員的雇傭日期顯示成文本來(lái)說(shuō),我們覺得將其高亮的顯示在一個(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")%>來(lái)將HireDate綁定到自己身上。

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

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

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

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

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

  注意:Calendar控件的選定日期不一定要可見。舉個(gè)例子來(lái)說(shuō),某個(gè)Calendar控件的選定日期為1999年4月1日,但卻顯示的是現(xiàn)在的年月。選定日期和可見日期是由Calendar控件的SelectedDate和VisibleDate屬性來(lái)指定的。因?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使用原來(lái)的數(shù)據(jù)重新綁定,這樣Calendar的選定日期就會(huì)變成原來(lái)的雇員受雇日期。

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

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

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

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

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

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

  另外還有一種用法,它將在某些情況下需要用到,比如說(shuō)在頁(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)來(lái)做到。這樣的格式化方法將在模板中調(diào)用,語(yǔ)法跟前面的數(shù)據(jù)綁定語(yǔ)法是一樣的。格式化方法可以接受若干個(gè)參數(shù),但是必須返回一個(gè)字符串。這個(gè)返回的字符串是一個(gè)用于插入到模板中的HTML。

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

protected string DisplayDaysOnJob(Northwind.EmployeesRow employee)
{
 // Make sure HiredDate is not null... if so, return "Unknown"
 if (employee.IsHireDateNull())
 return "Unknown";
 else
 {
 // Returns the number of days between the current
 // date/time and HireDate
 TimeSpan ts = DateTime.Now.Subtract(employee.HireDate);
 return ts.Days.ToString("#,##0");
 }
}

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

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

圖十五:給GridView添加一個(gè)新的模板列

  將這個(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) %>

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

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

  就是因?yàn)檫@個(gè),所以我還是選擇了傳遞整個(gè)EmployeesRow實(shí)例。在下一節(jié)教程中,我們會(huì)看到一個(gè)更加合適使用Eval("columnName")來(lái)傳遞參數(shù)給格式化方法的例子。

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

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

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

圖十六:“雇員在公司干了多久“也顯示出來(lái)了

總結(jié)

在GridView控件中,相對(duì)于其他的列控件來(lái)說(shuō),模板列可以處理更加復(fù)雜的數(shù)據(jù)呈現(xiàn)。模板列主要用于這樣一些情況:

·一個(gè)GridView列中需要顯示多個(gè)數(shù)據(jù)列

·使用一個(gè)Web控件來(lái)展示數(shù)據(jù)比一段簡(jiǎn)單的文本更好

·頁(yè)面的輸出取決于綁定到GridView的數(shù)據(jù),比如說(shuō)元數(shù)據(jù)或者說(shuō)是數(shù)據(jù)的重新格式化

除了自定義數(shù)據(jù)的顯示,模板列也用于編輯和插入數(shù)據(jù)時(shí)的用戶界面的自定義,這個(gè)我們?cè)诤竺娴恼鹿?jié)中將會(huì)講到。

接下來(lái)的兩節(jié)中,我們會(huì)繼續(xù)討論模板,我們會(huì)先看看在DetailsView中使用模板列的情況。跟著我們?cè)偃タ纯碏ormView,這玩意兒就是用模板來(lái)實(shí)現(xiàn)一個(gè)更加復(fù)雜的呈現(xiàn),當(dāng)然,用的是一大堆的字段。 

編程愉快!

關(guān)于作者

Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來(lái)一直應(yīng)用微軟Web技術(shù)。Scott是個(gè)獨(dú)立的技術(shù)咨詢顧問,培訓(xùn)師,作家,最近完成了將由Sams出版社出版的新作,24小時(shí)內(nèi)精通ASP.NET 2.0。他的聯(lián)系電郵為mitchell@4guysfromrolla.com,也可以通過(guò)他的博客http://ScottOnWriting.NET與他聯(lián)系。

您可能感興趣的文章:
  • asp.net下gridview 批量刪除的實(shí)現(xiàn)方法
  • asp.net gridview 72般絕技
  • asp.net gridview代碼綁定
  • asp.net GridView控件中模板列CheckBox全選、反選、取消
  • asp.net GridView 刪除時(shí)彈出確認(rèn)對(duì)話框(包括內(nèi)容提示)
  • Asp.net GridView使用大全(分頁(yè)實(shí)現(xiàn))
  • 在ASP.NET 2.0中操作數(shù)據(jù)之十:使用 GridView和DetailView實(shí)現(xiàn)的主/從報(bào)表
  • 在ASP.NET 2.0中操作數(shù)據(jù)之十五:在GridView的頁(yè)腳中顯示統(tǒng)計(jì)信息
  • 在ASP.NET 2.0中操作數(shù)據(jù)之二十八:GridView里的Button
  • 在ASP.NET 2.0中操作數(shù)據(jù)之四十九:為GridView控件添加RadioButton
  • 在ASP.NET 2.0中操作數(shù)據(jù)之五十:為GridView控件添加Checkbox
  • 在ASP.NET 2.0中操作數(shù)據(jù)之五十一:從GridView的頁(yè)腳插入新記錄

標(biāo)簽:臨夏 甘肅 聊城 中衛(wèi) 海西 慶陽(yáng) 清遠(yuǎn)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之十二:在GridView控件中使用TemplateField》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之十二:在GridView控件中使用TemplateField》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之十二:在GridView控件中使用TemplateField的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚州视频一区二区三区| 成人免费看aa片| 国产精品高潮呻吟视频| 五月天色婷婷丁香| 永久免费毛片在线播放不卡| 亚洲国产精品免费在线观看| 久久综合五月天| 亚洲最大成人av| 一区二区av在线| 加勒比在线一区| 国产精品久久久久久久久久久久久久| 高清毛片aaaaaaaaa片| 国产美女久久久| 天天干免费视频| 欧美精品一区二区三区在线四季| 99久久精品国产一区| 亚洲精品久久区二区三区蜜桃臀 | 欧美日韩一道本| 亚洲在线观看免费| 免费黄色特级片| 亚洲一区二区3| 欧美日韩激情四射| 在线观看国产三级| 91精品国产美女浴室洗澡无遮挡| 国产福利精品在线| 亚洲在线观看网站| 欧美日韩在线免费视频| 麻豆亚洲av熟女国产一区二 | 成人无码精品1区2区3区免费看| 在线播放日韩av| 人妻va精品va欧美va| 秋霞在线观看一区二区三区| 亚洲精品免费在线观看| 中文字幕无人区二| 国内精品久久久久影院薰衣草 | 视频一区视频二区在线观看| 日本不卡一区二区三区视频| 亚洲欧美日韩国产一区二区三区| 国产一精品一aⅴ一免费| 亚洲精品美女久久久| www.热久久| 国产伦精品一区二区三区四区免费 | 欧美成人一级视频| 波多野结衣国产| 欧美伊人久久大香线蕉综合69| 欧美日韩精品中文字幕一区二区| 一区二区三区中文字幕精品精品 | 福利片一区二区三区| 国产九色精品成人porny | 国产精品333| 欧美精品xxxxbbbb| 亚洲成人动漫在线| 欧美日韩在线观看一区二区| 一级特黄色大片| 亚洲欧洲精品一区二区三区波多野1战4 | 国产精品三级av| 国产精品成人无码专区| 久久久久久噜噜噜久久久精品| 麻豆极品一区二区三区| 国产成人精品综合久久久久99| 亚洲精品99999| 中文字幕永久在线观看| 欧美亚洲另类在线| 精品久久无码中文字幕| 中文字幕在线观看日 | 欧美激情高清视频| 国产一区二区三区黄片| 影音先锋欧美在线| 亚洲国产精品嫩草影院久久| 久久精品中文| 欧美在线一级片| 91成人在线看| 富二代精品短视频| 99久久久国产精品无码网爆 | 韩国三级中文字幕hd久久精品| 亚洲涩涩在线观看| 欧美精品电影免费在线观看| 91视频91自| 国产午夜福利一区二区| 欧美成人r级一区二区三区| 国产草草影院ccyycom| 亚欧激情乱码久久久久久久久| xxxx性欧美| 国产精品国产精品国产专区不蜜 | 色综合久久久久久中文网| 九九**精品视频免费播放| 欧美亚洲日本一区| 亚洲a视频在线| 欧美国产日韩激情| 国产日韩精品在线播放| 欧美三级日韩三级| 国产精品一区二区在线看| 印度午夜性春猛xxx交| 欧美一区二区三区四区五区六区 | 中文字幕日韩在线视频| 久久久久久久久久电影| 日韩免费在线视频观看| 青青艹视频在线| 欧美黄色三级网站| 欧美香蕉大胸在线视频观看| 国产一区二区三区在线观看免费 | 国产视频手机在线观看| a级网站在线观看| 日韩欧美www| 最新成人av在线| 黄网站欧美内射| 国产视频精品久久久| 黑人巨大精品欧美黑白配亚洲 | 亚洲精品视频中文字幕| 亚洲男同性视频| 亚洲人成色777777老人头| 国产精品20p| 欧美v在线观看| 国产欧美一区二区三区在线| 精品久久免费看| 国产欧美日韩三区| 亚洲奶汁xxxx哺乳期| 麻豆明星ai换脸视频| 99草草国产熟女视频在线| 国产手机精品在线| 99精品国产99久久久久久白柏| 久久久久久久久久一区二区三区| 中文字幕欧美人妻精品一区| 国内视频一区| 国产精品白嫩初高中害羞小美女 | 91蝌蚪porny成人天涯| 给我看免费高清在线观看| 亚洲wwwav| 国产精品99久久久久久似苏梦涵 | 久久午夜精品视频| 日韩国产一区三区| 激情懂色av一区av二区av| 94色蜜桃网一区二区三区| 日韩中文字幕麻豆| 中日韩av在线| www欧美com| 97人妻精品一区二区三区免费| 少妇黄色一级片| 水蜜桃在线免费观看| 欧美日韩国产综合视频在线| 国产国语videosex另类| 中文字幕欧美专区| 精品国产精品网麻豆系列| 在线这里只有精品| 亚洲精品日韩一| 久久久久久亚洲综合| 成人aa视频在线观看| 免费视频最近日韩| 亚洲欧美日韩精品永久在线| 肥臀熟女一区二区三区| 天天操天天射天天舔| 欧美老熟妇一区二区三区| 日本55丰满熟妇厨房伦| 国产综合 伊人色| 久久精品视频99| 亚洲欧美日韩在线一区| 欧美激情视频给我| 五月天婷婷激情| 美国黄色小视频| 国产黄a三级三级| 国产精品18在线| 五月天婷婷网站| 国产黄色片视频| 日韩手机在线视频| 91浏览器在线观看| 欧美精品乱码视频一二专区| 亚洲一级理论片| 91精品国产闺蜜国产在线闺蜜| 国产男女猛烈无遮挡在线喷水| 日本黄区免费视频观看| 日韩欧美在线视频播放| 久草免费在线观看视频| 日日骚av一区二区| 97人人爽人人爽人人爽| 久久久国产欧美| 久久9精品区-无套内射无码| 毛片av免费在线观看| 91成人在线观看喷潮教学| 你懂的在线观看网站| 国产精品久久久免费观看| 91视频免费看片| 国产高潮失禁喷水爽到抽搐| 神马一区二区影院| 麻豆精品蜜桃一区二区三区| 99蜜桃臀久久久欧美精品网站| 成人网在线免费观看| 国产一级片91| 成人免费视频一区二区| 波多野结衣久草一区| 精品国产999久久久免费| 亚洲国产精品va在看黑人| 搡老女人一区二区三区视频tv| 欧美国产视频日韩| 成人福利视频在线观看| 亚洲在线视频一区二区| 久久艳片www.17c.com| 亚洲视频专区在线| 2020国产精品视频| 成人av资源| 一本大道东京热无码aⅴ| 图片区乱熟图片区亚洲| www.xxxx日本| 成人午夜免费在线观看| 国产老妇另类xxxxx| 国产精品国产成人国产三级| 欧美一区二区性放荡片| 欧美激情免费视频| 不卡日韩av| 日韩精品无码一区二区三区免费| 亚洲av成人片色在线观看高潮 | 久久久久久免费精品| 国产精品 欧美在线| 国产三级视频网站| 日韩欧美www| 国内精久久久久久久久久人| 一区二区不卡在线| 成人激情文学综合网| 快播亚洲色图| 欧美人禽zoz0强交| 国产高清第一页| 国产欧美日韩一区二区三区在线观看| 欧美老年两性高潮| 国产精品国语对白| 高清在线观看免费| 青青草在线观看视频| 免费在线观看精品| 亚洲综合久久久久| 日韩综合视频在线观看| 九九久久99| 杨幂一区二区国产精品| 蜜臀av性久久久久av蜜臀妖精| 亚洲国产aⅴ成人精品无吗| 色老头一区二区三区| 亚洲欧美日韩综合一区| 偷拍女澡堂一区二区三区| 日韩黄色一级片| 欧美中文字幕不卡| 国产精品一区二区三区久久| www,av在线| 在线观看视频中文字幕| 国产亚洲视频系列| 亚洲一区二区福利| 欧美午夜免费| 日本黄色三级大片| 疯狂揉花蒂控制高潮h| 久草在线在线精品观看| 五码日韩精品一区二区三区视频| 欧美国产禁国产网站cc| 国产亚洲女人久久久久毛片| 草b视频在线观看| 精品露脸国产偷人在视频| 日本天堂在线播放| 高清shemale亚洲人妖| 亚洲精品乱码久久久久久按摩观| 美女黄毛**国产精品啪啪| 男人天堂资源网| aaa欧美日韩| 日韩中文字幕视频| 黑人糟蹋人妻hd中文字幕| 亚洲黄网在线观看| 欧美日韩精品在线| 97se亚洲综合| 久久精品在线观看视频| 成人激情av网| 色综合色综合网色综合| 国产精品动漫网站| 后进极品白嫩翘臀在线视频| 欧美一级欧美一级在线播放| 欧美午夜精品久久久久免费视| 青青草原国产视频| 一区二区三区日韩精品视频| 国产成人av在线播放| 国产男女猛烈无遮挡a片漫画| 国产精品一区二区在线播放 | 可以看毛片的网址| 日本欧美www| 国产精品网站在线| 亚洲老头老太hd| 日本三级免费网站| 成人在线视频一区| 四虎1515hh.com| 最近2019年中文视频免费在线观看| 99re视频在线| 色婷婷激情一区二区三区| 黄色污污网站在线观看| 欧美极品日韩| 色综合久久六月婷婷中文字幕| 精品在线视频一区二区| www.国产高清| 欧美大片日本大片免费观看| 男女无套免费视频网站动漫| 国产精品一区一区| 欧美精品久久久久a| 国产精品成人一区二区三区电影毛片| 菠萝蜜视频在线观看一区| 性欧美xxxx交| 精品亚洲乱码一区二区| 日韩欧美aaa| 日本免费成人网| 免费的成人av| 人体精品一二三区| 麻豆影视在线播放| 日韩免费电影网站| 久久久久xxxx| 中文字幕欧美日韩一区| 欧美1o一11sex性hdhd| 日本激情视频网站| 孩xxxx性bbbb欧美| 久久国产一级片| 亚洲午夜精品久久久久久性色 | 国产成人午夜视频网址| 国产精品suv一区二区| 国产精品免费久久久久| 国产成人午夜视频网址| 日本a级c片免费看三区| 欧美国产日韩一区二区| 色噜噜狠狠一区二区| 日韩欧美国产电影| 国产一区二区在线影院| 曰本女人与公拘交酡| 超碰人人爱人人| 欧美成人免费视频| 亚洲一区二区五区| 蜜桃av中文字幕| 91香蕉嫩草影院入口| 五月天中文字幕| 国内精品视频在线| 中文字幕在线2018| 欧美亚洲成人精品| 一级黄色片在线| 国产99在线|中文| 国产成人三级在线播放| 97在线看福利| 一级α片免费看刺激高潮视频| 欧美激情亚洲自拍| 在线观看免费观看在线| 亚洲一区二区三区乱码aⅴ| 日韩有码第一页| 国产激情美女久久久久久吹潮| 亚洲精品永久www嫩草| 伊人网av在线| 国产91色在线免费| 欧美特级特黄aaaaaa在线看| 丁香花在线影院观看在线播放| 成人亚洲一区二区一| 久热这里只精品99re8久| 91女神在线视频| 日韩中文字幕三区| 欧美日韩国产另类一区| 91国模少妇一区二区三区| 精品一区精品二区| 中文字幕人妻一区二区在线视频| www.午夜精品| 免费中文字幕在线| 亚洲春色在线视频| 最新日韩中文字幕| 国产视频一区二区在线| 日韩精品久久理论片| 日日夜夜操视频| 欧美亚一区二区三区| 国产v片免费观看| 日韩欧美99| 欧美亚洲日本网站| 亚洲国产欧美精品| 黄色在线免费观看| 国产免费久久av| 久久人人爽爽爽人久久久| 免费日韩中文字幕| 亚洲电影免费观看高清完整版在线观看 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 久久奇米777| 国产乡下妇女做爰视频| 欧美中日韩在线| 韩国国内大量揄拍精品视频| 偷拍亚洲欧洲综合| 久久久亚洲一区| 成人精品一二三区| 和岳每晚弄的高潮嗷嗷叫视频| 日本午夜在线亚洲.国产| 色哟哟国产精品| 最新中文字幕在线观看视频| 国产精品视频自拍| 成人av免费在线播放| 欧美日韩在线免费观看视频| 日韩欧美国产电影| 久久久久久久久久久久久久久99| 久久精品国产亚洲av麻豆蜜芽| 三级av免费看| 青青草国产精品| 7m精品福利视频导航| 日韩欧美一区二区三区在线| 国产欧美一区二区三区鸳鸯浴 | 日本在线视频www色| 2021国产精品视频| 精品国产一区二区精华| 亚洲人成伊人成综合网小说| 久色成人在线| 日本视频在线观看免费| 欧美大喷水吹潮合集在线观看| 亚洲一区在线直播| 国产精品香蕉国产| 一区三区二区视频| 欧美性色aⅴ视频一区日韩精品| 久久久久久久电影| 久久中文欧美| 一级黄色a视频| 欧美日韩精品一区二区三区视频播放| 一二三级黄色片| 国产a级黄色大片| 麻豆av一区二区三区久久|