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

列表控件示例:HeadlineList

開(kāi)發(fā) 后端
數(shù)據(jù)綁定控件通常為列表控件。本文提供了一個(gè)列表控件示例:HeadlineList。

列表控件示例

數(shù)據(jù)綁定控件通常為列表控件。列表控件通過(guò)為它的主框架邊界內(nèi)的每個(gè)綁定數(shù)據(jù)項(xiàng)重復(fù)固定的模板,生成它自己的用戶界面。例如,CheckBoxList 控件只是為每個(gè)綁定數(shù)據(jù)項(xiàng)重復(fù) CheckBox 控件。同樣,DropDownList 控件遍歷它的數(shù)據(jù)源,并且在 <  select > 父標(biāo)記內(nèi)創(chuàng)建新的 <  option > 元素。除了列表控件以外,ASP.NET 還提供了迭代控件。它們有什么不同?

列表控件和迭代控件的不同之處在于被應(yīng)用于每個(gè)數(shù)據(jù)項(xiàng)的可重復(fù)模板允許具有的自定義級(jí)別。像 CheckBoxList 控件一樣,Repeater 控件遍歷綁定數(shù)據(jù)項(xiàng)并應(yīng)用用戶定義的模板。Repeater(以及更完善的 DataList 控件)極為靈活,但是在使代碼保持模塊化和分層化方面不能提供多少幫助。要使用 Repeater,您需要在該頁(yè)(或外部用戶控件)中定義模板,并使用 ASPX 源中的數(shù)據(jù)綁定屬性。它是快速、有效的,有時(shí)還是必要的,但肯定不是整潔和優(yōu)雅的。

在 ASP.NET 1.x 中,所有列表控件都從 ListControl(它是表 1 中唯一一個(gè)已經(jīng)在 1.x 中定義的類)繼承。讓我們進(jìn)入編碼猴子模式,并且開(kāi)始練習(xí)使用 ASP.NET 2.0 中的數(shù)據(jù)綁定控件。我將首先生成一個(gè) HeadlineList 控件,以便為每個(gè)數(shù)據(jù)項(xiàng)呈現(xiàn)兩行數(shù)據(jù)綁定文本。此外,該控件還將具備一些布局功能,例如,垂直或水平呈現(xiàn)。

列表控件示例:HeadlineList 示例控件

正如前面提到的那樣,ListControl 是 ASP.NET 1.x 和 2.0 中所有列表控件的基類。非常令人愉快的是,可以用一種非常平滑的方式將在此為 ASP.NET 2.0 編寫(xiě)的 HeadlineList 控件向后移植到 ASP.NET 1.x。出于某種原因,當(dāng)需要生成標(biāo)題列表時(shí),人們的大腦中涌現(xiàn)的第一個(gè)想法往往是使用 Repeater。的確,Repeater 會(huì)使這一工作變得非常簡(jiǎn)單。

  1. < asp:Repeater runat="server"> 
  2.    < HeaderTemplate> 
  3.       < table> 
  4.    < /HeaderTemplate> 
  5.    < ItemTemplate> 
  6.       < tr>< td> 
  7.       < %# DataBinder.Eval(Container.DataItem, "Title") %> 
  8.       < hr> 
  9.       < %# DataBinder.Eval(Container.DataItem, "Abstract") %> 
  10.       < /td>< /tr> 
  11.    < /ItemTemplate> 
  12.    < FooterTemplate> 
  13.       < /table> 
  14.    < /FooterTemplate> 
  15. < /asp:Repeater> 

這段代碼有什么問(wèn)題?或者更準(zhǔn)確地說(shuō),這段代碼中有哪些可以改進(jìn)的地方?

注:在 ASP.NET 2.0 中,您可以將 DataBinder.Eval(Container.DataItem, field) 替換為一個(gè)較短的表達(dá)式,該表達(dá)式受益于 Page 類上的一個(gè)新的公共方法 — Eval。這一新的表達(dá)式類似于 Eval(field)。在內(nèi)部,Eval 調(diào)用 DataBinder 類上的靜態(tài) Eval 方法,并且確定要使用的正確綁定上下文。

字段的名稱在 ASPX 頁(yè)中硬編碼??梢詫?shí)現(xiàn)可重用性,但只能通過(guò)剪切和粘貼實(shí)現(xiàn)。您所添加的用于使 Repeater 的行為更加豐富多彩的代碼越多,對(duì)該解決方案及其跨越頁(yè)和項(xiàng)目的可重用性的危害就越大。如果標(biāo)題列表控件恰恰是您需要的東西,則請(qǐng)改而嘗試以下方法。

  1. public class HeadlineList : ListControl, IRepeatInfoUser  
  2. {  
  3.   :  
  4. }  

ListControl 是列表控件的基類(它位于與 CheckBoxList、DropDownList 和類似控件相同的系列中);IRepeatInfoUser 是上述大多數(shù)控件加以實(shí)現(xiàn)以便用水平或垂直方式在列和行中呈現(xiàn)的幾乎不為人所知的界面。請(qǐng)注意,ListControl 和 IRepeatInfoUser 還存在于 ASP.NET 1.x 中,并且以幾乎與 2.0 相同的方式工作。

列表控件是圍繞一個(gè)要重復(fù)的控件生成的;該控件(或控件圖)是一個(gè)類屬性,并且在加載時(shí)實(shí)例化以節(jié)省一些 CPU 時(shí)間。以下為私有 ControlToRepeat 屬性的實(shí)現(xiàn)。

  1. private Label _controlToRepeat;  
  2. private Label ControlToRepeat  
  3. {  
  4.    get 
  5.    {  
  6.       if (_controlToRepeat == null)  
  7.       {  
  8.          _controlToRepeat = new Label();  
  9.          _controlToRepeat.EnableViewState = false;  
  10.          Controls.Add(_controlToRepeat);  
  11.       }  
  12.       return _controlToRepeat;  
  13.    }  
  14. }   

在該示例中,要重復(fù)的控件(標(biāo)題)是一個(gè)在首次讀取時(shí)實(shí)例化的 Label。HeadlineList 控件還應(yīng)當(dāng)向用戶提供通過(guò)多種屬性(如 RepeatLayout、RepeatColumns 和 RepeatDirection)影響外觀的方式。很多標(biāo)準(zhǔn)列表控件上都定義了這些屬性,因此開(kāi)發(fā)人員不應(yīng)該對(duì)它們感到陌生。它們的實(shí)現(xiàn)是類似的,并且看起來(lái)像下面的代碼。

  1. public virtual RepeatDirection RepeatDirection  
  2. {  
  3.    get 
  4.    {  
  5.       object o = ViewState["RepeatDirection"];  
  6.       if (o != null)  
  7.          return (RepeatDirection) o;  
  8.       return RepeatDirection.Vertical;  
  9.    }  
  10.    set 
  11.    {  
  12.       ViewState["RepeatDirection"] = value;  
  13.    }  
  14. }  

為完成 HeadlineList 控件而需要編寫(xiě)的另一段代碼以呈現(xiàn)為中心。IRepeatInfoUser 接口對(duì)您可以用來(lái)控制呈現(xiàn)過(guò)程的各種屬性進(jìn)行計(jì)數(shù)。這方面的屬性示例有 HasHeader、HasFooter 和 HasSeparator 布爾型屬性。您可以像實(shí)現(xiàn)其他任何普通屬性一樣實(shí)現(xiàn)這些屬性,并且根據(jù)需要在 RenderItem 接口方法中使用它們。

  1. public void RenderItem(ListItemType itemType, int repeatIndex,   
  2. RepeatInfo repeatInfo, HtmlTextWriter writer)  
  3. {  
  4.    string format = "< b>{0}< /b>< hr style='solid 1px black'>{1}";  
  5.    Label lbl = ControlToRepeat;  
  6.    int i = repeatIndex;  
  7.    lbl.ID = i.ToString();  
  8.    string text = String.Format(format, Items[i].Text, Items[i].Value);  
  9.    lbl.Text = text;  
  10.    lbl.RenderControl(writer);  
  11. }  

RenderItem 對(duì)向頁(yè)提供的輸出承擔(dān)最終的責(zé)任。它獲得要重復(fù)的控件,并且將其呈現(xiàn)到標(biāo)記中。RenderItem 是從 Render 中調(diào)用的。

  1. protected override void Render(HtmlTextWriter writer)  
  2. {  
  3.    if (Items.Count >0)  
  4.    {  
  5.       RepeatInfo ri = new RepeatInfo();  
  6.       Style controlStyle = (base.ControlStyleCreated   
  7.                                   ? base.ControlStyle : null);  
  8.       ri.RepeatColumns = RepeatColumns;  
  9.       ri.RepeatDirection = RepeatDirection;  
  10.       ri.RepeatLayout = RepeatLayout;  
  11.       ri.RenderRepeater(writer, this, controlStyle, this);  
  12.    }  
  13. }  

RepeatInfo 是一個(gè) Helper 對(duì)象,它經(jīng)過(guò)專門(mén)設(shè)計(jì),以便通過(guò)重復(fù)現(xiàn)有的控件圖來(lái)生成新控件。以上就是所需的全部代碼。讓我們準(zhǔn)備一個(gè)示例頁(yè),并測(cè)試該控件。

  1. < expo:headlinelist id="HeadlineList1" runat="server"   
  2.        repeatlayout="Table" repeatdirection="Vertical" repeatcolumns="2"   
  3.        datatextfield="LastName" datavaluefield="Notes" /> 

圖 2 顯示了該控件的工作方式。

HeadlineList 數(shù)據(jù)綁定控件 

列表控件示例: HeadlineList 數(shù)據(jù)綁定控件

該控件在設(shè)計(jì)時(shí)工作正常,并且不需要插入其他任何代碼。然而,這段代碼的最令人愉快的邊界效應(yīng)并非免費(fèi)的設(shè)計(jì)時(shí)支持。對(duì)我來(lái)說(shuō),它簡(jiǎn)直太美妙了,因?yàn)樗軌蚴褂?ADO.NET 數(shù)據(jù)源對(duì)象(例如,DataTable 或 DataSet)和數(shù)據(jù)源組件(如 SqlDataSource)。您可以取走這段代碼,將其編譯為 ASP.NET 1.x 項(xiàng)目,而它就可以使用基于 IEnumerable 的數(shù)據(jù)源。如果將這段代碼引入到 ASP.NET 2.0 項(xiàng)目中,則它無(wú)須更改就同樣可以使用數(shù)據(jù)源對(duì)象。

這一事實(shí)的意義是什么?

在 ASP.NET 1.x 中,ListControl 類是一個(gè)令人愉快的例外 — 但仍然是一個(gè)例外。在 ASP.NET 2.0 中,您可以使用類似的簡(jiǎn)單但有效的方法來(lái)生成任何數(shù)據(jù)綁定控件。在這樣做的時(shí)候,您可以利用合并了大部分復(fù)雜性并且將大多數(shù)已知的最佳做法硬編碼的新基類。

【編輯推薦】

  1. ASP.NET 2.0數(shù)據(jù)綁定機(jī)制:生成控件
  2. ASP.NET 2.0數(shù)據(jù)綁定的發(fā)展簡(jiǎn)述
  3. 概述ASP.NET調(diào)用Excel進(jìn)程
  4. ASP.NET開(kāi)發(fā)技巧之Theme功能淺析
  5. 詳解ASP.NET動(dòng)態(tài)編譯
責(zé)任編輯:yangsai 來(lái)源: MSDN
相關(guān)推薦

2009-08-07 16:09:25

ASP.NET AJA

2011-08-31 10:23:40

MTK平臺(tái)列表控件

2010-01-21 10:12:57

VB.NET控件自動(dòng)排

2009-12-31 14:38:34

Silverlight

2009-08-06 14:42:54

ASP.NET服務(wù)器控

2024-09-09 16:30:08

Python編程

2009-10-27 08:56:22

VB.NET文件夾

2009-08-07 17:17:43

ASP.NET控件設(shè)計(jì)

2009-09-01 16:49:56

C#文件上傳下載

2024-01-22 09:54:10

free命令

2009-08-03 15:43:22

asp.net控件

2013-12-19 13:40:44

Android ApiAndroid開(kāi)發(fā)Android SDK

2012-02-08 10:16:43

WPF

2009-09-07 17:26:08

LinqDataSou

2009-08-04 13:10:05

ASP.NET服務(wù)器控

2010-11-22 16:12:54

MySQL多表更新

2010-05-27 15:18:47

MySQL連接

2009-09-28 16:54:34

Hibernate示例

2022-08-11 16:29:32

Tekton流水線遷移工作流

2010-09-08 16:17:37

SQL循環(huán)語(yǔ)句
點(diǎn)贊
收藏

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