熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET 2.0移動開發之列表控件

2013-11-13 09:45:10  來源: .NET編程 
概述

  在很多情況下我們都會使用到列表控件來方便用戶選擇一些選項例如在某網站上注冊新用戶時通常會詢問你的性別是還是這時我們用單項按鈕以供用戶做出相應的選擇還有當你填寫自己的家庭地址時通常會使用到一個包含各省省名的下拉列表來供用戶直接選擇這樣可以減少用戶的輸入量上述的這些單項按鈕和下拉列表都在ASPNET移動程序中都是以列表控件的形式存在的我們可以使用列表控件來呈現各種形式(單項多選下拉列表)的列表以供用戶選擇和使用但是在ASPNET 移動開發工具包中只有三個列表控件分別為SelectionList List和ObjectList 控件雖然沒有ASPNET 中那麼多類型的列表控件但是我們卻可以使用SelectionList List和ObjectList這三個列表控件實現單項多選等幾乎所有的功能在本系列文章中將探討這三個控件的一些基本功能和使用方法並說明這三個控件相似之處及異同點

  圖是SelectionList List和ObjectList三個控件在類的繼承上的關系




  上面的三個列表控件中SelectionList是最簡單的但是它可以以各種不同的類型進行呈現因此具有很大的靈活度以供不同的需求使用應用的列表類型同時因為SelectionList控件不支持分頁功能所以在包含多個列表項的情況下該控件就顯得力不從心了還有一點要需要重點說明的是SelectionList是這三個列表控件中唯一支持多選的而且該控件還可以以下拉列表的形式進行呈現也可以以單項和多選框的方式進行呈現當然這種呈現格式必須要被移動設備上的浏覽器所接受在一些WML浏覽器上只支持一些特殊的呈現形式例如單項和多選按鈕並不支持下拉列表這種呈現形式演示了下拉列表在不同浏覽器上呈現時所存在的差別



在上圖所示的PocketIE浏覽器上列表控件是以下拉列表的形式呈現的而在Openwave的WML浏覽器上下拉列表類型的呈現形式是不支持的為此在該浏覽器中是將列表中的各個列表項顯示出來供用戶進行相應的選擇  List列表控件支持分頁功能這就意味著它支持列表項較多的列表它只可以以項目符號列表或編號列表的形式進行呈現(只要浏覽器支持即可)除了之外其它的被SelectionList支持的列表形式(例如下拉列表)在List中均無法實現中List列表控件就是以編號列表的形式呈現的並且支持分頁功能



List列表控件以編號列表的形式呈現在頁面上而且支持分頁功能

  在上述三個列表控件中最復雜的當屬ObjectList 控件了SelectionList和List控件允許你使用服務器控件語法靜態地聲明列表項但是ObjectList控件是無法采用這種方式來添加列表項的你必須在ObjectLis列表控件與相應的數據源綁定後再通過代碼將列表項添加到列表中ObjectList 控件允許一個列表項中同時顯示多個字段這是其它兩個控件所不具備的它們只允許每個列表項只顯示一個字段的信息除此之外ObjectList 控件中的每個列表項還可以和多個命令相關聯其它兩個控件所不具備的功能



ObjectList 控件中可以在每個列表項中顯示多個字段這裡同時顯示了球隊名稱贏和積分等字段

每個列表項可以和多個命令進行關聯頁面下方的各個鏈接就是與列表項關聯的命令你可以選擇不同的命令產生不同的操作
  下表概括了上述三個控件的主要功能

能力 SelectionList List ObjectList 是否可以以下拉列表列表框 單項或多選按鈕等類型在HTML浏覽器上進行呈現 √     是否支持多選 √     以項目符號列表或編號列表的形式進行呈現   √   當列表包含較多的列表項時是否可以啟用分頁功能 √ √   是否可以通過服務器語法聲明靜態地生成列表項 √ √   是否可以與數據源綁定 √ √ √ 在一個列表項中是否可以同時顯示多個字段     √ 在選擇一個列表項後是否會觸發相應的事件 √(注釋) √ √ 每個列表項是否可以自定義相關聯的命令     √ 是否支持模板   √ √ 注釋SelectionList列表控件在選擇一個列表項後其自身是無法自動產生一個回發(postback)操作的你必須在包含該SelectionList列表控件的Form控件上放置一個Command控件再由該Command控件將因列表選項發生改變的信息回發到服務器上這樣ASPNET運行時就可以根據這些信息做出相應的處理並將處理後的信息返回到移動頁面上

  采用不同的方式構建列表

  在開始探究每個列表控件的具體用法時我們首先來了解一下上述三個控件的共同特性SelectionList和List控件允許開發人員定義靜態地定義各個列表項也就是我們可以在服務器控件語法中使用<Item>標簽來定義每個列表項對應的文本信息和值信息而動態的實現方式就是通過代碼創建和列表中的每個列表項對應的SystemWebUIMobileControlsMobileListItem 對象並將這些對象添加到列表控件的Items集合中由於每個列表項都是預先設置好的所有我們也稱這種列表為靜態列表

  還有一種方式就是將列表控件與一個數據源進行綁定由於該列表控件中的所有列表項所需的文本信息和值信息都讀取自數據源因此這些列表項都是根據這些信息動態生成注意上述的三個列表控件都支持數據綁定的方式動態地生成列表

  靜態列表的實現

  前文提過我們可以通過靜態的方式實現列表其實這種實現就是在服務器控件語法中使用<Item>標簽來設置每個列表項所需的文本信息和值信息下面我們來通過一段代碼來說明如何靜態地實現一個列表程序清單是一個SelectionList控件的聲明我們希望通過該列表控件來選擇一個列表項在這裡我們將手機的品牌和型號分別作為列表項的文本信息和值信息你可以在每個<Item>標簽中使用Text屬性自動文本信息使用Value屬性指定值信息

  程序清單

<mobile:SelectionList id=SelectionList runat=server
 <Item Text=Dopoda Value=P />
 <Item Text=Motorola Value=A />
 <Item Text=Nokia Value=N />
 <Item Text=Samsung Value=E />
</mobile:SelectionList>
  我們將在SelectionList列表控件詳解這一章中通過具體的實例來應用程序清單中的代碼在這只是簡要地介紹下實現靜態列表的方法其實我們還可以以一種可視化的方式來實現靜態列表當然這要依靠Visual Studio 開發環境的支持在Visual Studio 提供了一個非常有用的屬性生成器使得你可以很方便地定義一個靜態列表只要你選擇列表控件的智能標簽而後再選擇屬性生成器鏈接就會彈出屬性生成器對話框我們可以通過該對話框以可視化的方式產生程序清單中的代碼如圖所示



  圖 我們可以在該對話框中通過創建新項按鈕來產生一個新的列表項而後在這個列表項對應的項文本文本框處填寫好列表項的文本信息和值信息就創建好了一個列表項如果你要調整各個列表項之間的次序可以點擊上下箭頭按鈕來做出相應的調整屬性生成器對話框的常規選項卡中用戶可以選擇列表控件在頁面上的呈現形式例如SelectionList列表控件支持下拉列表列表框單項按鈕復選按鈕和多選列表框等幾種形式開發人員可以根據實際的需要選擇合適的類型如圖所示


  ASPNET運行時是通過下面所描述的方式來解析服務器控件語法中的各個列表項的在你使用靜態的方式構建一個列表時ASPNET實際上是針對這個列表中的每個列表項都創建一個SystemMobileUIMobileControlsMobileListItem對象並使用<Item> 標簽中的Text和Value屬性指定的文本信息和值信息對相應的MobileListItem對象進行初始化而後再將初始化後的MobileListItem對象添加到一個SystemMobileUIMobileControlsMobileListItemCollection集合對象中我們可以在代碼中通過SelectionList或List類的Items屬性來訪問這個MobileListItemCollection集合對象事實上程序清單和程序清單的功能是相同的兩種方式都可以生成靜態列表只不過程序清單隱藏了靜態列表的底層的實現更容易操作罷了

  程序清單

protected void Page_Load(object sender EventArgs e)
{
 if (!IsPostBack)
 {
  SelectionListItemsAdd(new MobileListItem(Dopoda P));
  SelectionListItemsAdd(new MobileListItem(Motorola A));
  SelectionListItemsAdd(new MobileListItem(Nokia N));
  SelectionListItemsAdd(new MobileListItem(Samsung E));
 }
}  將列表控件與數據集合進行綁定

  前文提過除了使用靜態的方式定義列表外我們還可以將SelectionList List和ObjectList三個列表控件與特定的數據源進行綁定這些列表控件支持兩種類型的數據源: SystemCollectionsIEnumerable和SystemComponentModelIListSourceNet Framework中的許多集合類都是實現了IEnumerator接口為此這些類都支持簡單的枚舉功能至於這些類的具體實例有位於SystemCollections命名空間的ArrayArrayListHashtable和ListDictionary還要一些和控件相關聯的集合對象(例如前面的代碼中使用到的MobileListItemCollection)如果你要查看所有實現了IEnumerator接口的集合類的話請自行參考MSDN幫助文檔

  你還可以將列表控件與IListSource數據集合進行綁定SystemData命名空間中的兩個類實現了IListSource這種接口這兩個類就是我們在ADONET中經常使用的DataSet和DataTable我們知道這兩個類是相關聯的因為DataSet相當於一個由多個DataTable組成的集合DataSet類是ADONET構架中的一個主要組件並且DataSet還相當於在數據庫中所檢索到的數據在內存中的一個緩存當列表控件的數據源為一個DataSet對象時因為一個DataSet可能包含多個DataTable對象所以我們還必須使用SelectionListDataMember屬性確切地指定使用那個DataTable對象來填充列表項注意當你使用一個IEnumerator數據源時是沒有必要指定DataMember屬性的至於DataSet在ASPNET移動程序中的具體應用將在其它章節中進行介紹

  當你需要以數據綁定的方式動態地實現一個列表的話那麼應該將該列表控件的DataSource屬性指定一個相關聯的數據源如果數據源是一個DataSet對象的話那麼還需要使用DataMember屬性確切地指定用那個DataTable填充列表項對於SelectionList和List控件來說你可以使用DataTextField和DataValueField兩個屬性分別指定數據源中的兩個字段列表控件會自動將這兩個字段的內容作為各個列表項的文本信息和值信息而ObjectList列表控件是使用LabelField屬性來指定數據源中的一個字段使得該字段中的內容應用到各個列表項中進行呈現至於每個列表項的其它字段內容你可以在ObjectList的詳細信息視圖頁上進行查看

  我們可以以代碼的方式或服務器控件語法的方式實現上述數據綁定屬性的設置例如你希望在一個SelectionList列表控件中使用Manufacturer字段作為各列表項的文本信息且Model字段作為各列表項的值信息那麼其設置的方法如程序清單所示

  程序清單

<mobile:SelectionList ID=SelectionList Runat=server SelectType=MultiSelectListBox DataTextField=Manufacturer DataValueField=Model
</mobile:SelectionList>
  為了獲取數據源中對應字段的內容我們還需要定義一個類使得每個列表項都可以讀取相應的文本信息和值信息

  程序清單

public class MobileTelephone
{
 private String manufacturer model;
 public MobileTelephone(String manufacturer String model)
 {
  thismanufacturer = manufacturer;
  thismodel = model;
 }

 public String Manufacturer { get { return thismanufacturer; } }
 public String Model { get { return thismodel; } }
}
  然後在Page_Load事件處理函數中創建所有的數據項並將其添加到一個ArrayList對象中最後就是設置列表控件的DataSource屬性了在這裡我們將DataSource指定為這個ArrayList對象完成上述的步驟再調用DataBind方法這樣就將列表控件和數據源進行綁定了

  程序清單

protected void Page_Load(object sender EventArgs e)
{
 if (!IsPostBack)
 {
  ArrayList array = new ArrayList();
  arrayAdd(new MobileTelephone(Dopoda P));
  arrayAdd(new MobileTelephone(Motorola A));
  arrayAdd(new MobileTelephone(Nokia N));
  arrayAdd(new MobileTelephone(Samsung E));
  SelectionListDataSource = array;
  SelectionListDataBind();
 }
}
  使用上述代碼的完整示例將在具體探討每個列表控件時會應用到

  提示DataBind方法對於數據綁定來說是至關重要的很多開發人員經常忘記調用這個方法以致列表控件不顯示任何列表項我們可以使用兩種方法來使用DataBind方法一種就是在每個要進行數據綁定的列表控件上單獨使用DataBind方法如程序清單所示你還可以采用一種一勞永逸的方法那就是使用MobilePageDataBind方法(在程序清單使用thisDataBind()替代 SelectionListDataBind()這裡的this代表的就是MobilePage)這樣在頁面上存在多個數據綁定的列表控件時僅需使用一個thisDataBind()方法就可以實現所有列表控件和數據源的綁定而無需為每個實現了數據綁定的列表控件都調用一次DataBind方法


From:http://tw.wingwit.com/Article/program/net/201311/11496.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.