亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

使用 ASP+ 列表綁定控件 (轉自ms 一)

2024-05-04 11:06:24
字體:
來源:轉載
供稿:網友

使用 asp+ 列表綁定控件
nikhil kothari
microsoft corporation
2000年7月

摘要: 說明 asp+ repeater、datalist 和 datagrid 服務器控件。這些控件能夠實現一個根植于數據源的,基于 html 的應用程序用戶界面。討論與這些控件有關的概念并概要介紹使用這些控件的基本示例。

目錄
簡介
列表綁定控件是如何工作的?
repeater 控件
datalist 控件
datagrid 控件
repeater、datalist 或 datagrid?
相關資源
下載與本文相關的示例文件 (56 kb)。

簡介
repeater、datalist 和 datagrid 控件構成 asp+ 頁面框架中 system.web.ui.webcontrols 名稱空間內的相關 web 控件集。這些控件使 html 顯示所綁定列表或數據源的內容。因此,將它們統稱為“列表綁定控件”。

與框架中的其它 web 控件類似,這些控件提供一致的編程模型并封裝一個獨立于瀏覽器的表示邏輯。這些特性使開發人員能夠針對對象模型編程而不用必須掌握與 html 相關的那些不一致的和復雜的技術知識。

這三種控件可以按多種布局(包括列表、分欄/報紙欄目和流布局(html 流))來表示與其相關的數據源內容。此外,它們還允許您創建完全不同的或完全定制的布局。除了封裝有表示邏輯外,還提供了用來處理已發送數據、執行狀態管理和引發事件的功能。最后,它們還對諸如選擇、編輯、分頁和排序之類的標準操作提供不同級別的支持。這些控件可以簡化幾種常見的 web 應用程序方案,包括報表、購物車、產品列表、查詢結果和導航菜單。

下面幾節將進一步說明這些控件和如何在您的 web 應用程序中使用它們,以及如何選用控件。

列表綁定控件是如何工作的?
本節是本文其余部分的背景材料。概述了這些列表綁定控件的工作方式、它們的共同特性以及某些相關概念。

datasource 屬性
每個控件都有一個 datasource 屬性,其類型為 system.collections.icollection。用最簡單的話來說,數據源是同類對象的一個列表或集合。

此框架中有幾個對象提供了 icollection 的實現。這個集合包括 system.data.dataview (它通常用來訪問關系數據庫和 xml 數據)、一般 icollection 實現(如 arraylist 和 hashtable)以及數組。

與傳統的數據綁定控件(它們通常需要 ado 記錄集)不同,除了實現 icollection 接口之外,這些列表綁定控件未對其數據源強加任何其它要求。根據設計,通過大量增加可作為有效 datasource 屬性值的類型和數據結構,它們能夠為您的應用程序代碼實現最大程度的簡單和靈活性。

項目集合
每個列表綁定控件都包含一個項目集合??丶ㄟ^列舉這些對象當前的數據源來置入其項目集合。在列舉中為每個對象創建單個項目并用于表示該對象。這些項目同時成為列表綁定控件中包含的控件層次結構的一部分。

下表列出了與數據源的數據相關聯的項目類型。

項目 創建的默認項目類型
alternatingitem 為項目集合中具有奇數下標的項目創建
selecteditem 為選定的項目創建(不論該項目是否為備選項目)
edititem 為處于編輯模式下的項目創建(不管它是否被選中或是否為備選項目)


控件同時創建將在表示中用到的下列項目。但是,它們并不與數據源的數據相關聯。

標頭 用來表示標頭信息
注腳 用來表示注腳信息
分隔符 用來表示圖 1 中所示的每個項目之間的內容,并且僅適用于 repeater 和 datalist
分頁符 用來表示與 datagrid 控件相關聯的分頁 ui




圖 1. 相對于“控件”集合的“項目”集合

項目的數據綁定和創建
列表綁定控件遵循在整個 asp+ 框架中實現的顯式數據綁定模型。這意味著控件僅當其 databind 方法被調用時才需要并列舉其數據源。

當調用 databind 方法時,列表控件將列舉其數據源、創建項目并通過從其數據源中提取值來對其進行初始化。如果啟用了狀態管理,則控件還將保存所需的全部信息,以便在頁面的回傳處理期間重新創建其項目而無須重新設置數據源。

顯式數據綁定模型使您的應用程序代碼可以精確地確定在處理序列中何時及何處需要數據源。這種功能使對數據庫服務器的訪問更少且更高效,而這些訪問通常是 web 應用程序最耗費資源的操作。

一般規則是每當您需要重新創建項目時都必須調用 databind。在大多數情況下,您將在您的頁面首次被請求創建初始項目集合時調用 databind。在該頁面的后續執行過程中,您將需要在引起項目集合被更改的各種事件處理程序中調用此方法。當用于創建初始數據源的查詢被修改時,就可能發生這種情況。當項目的狀態改變(如從只讀模式變為編輯模式)時也可能發生這種情況。

樣式
通過在對象模型上使用樣式屬性,您可以定義全部 datalist 和 datagrid 控件及其所包含項目的格式和外觀。這些屬性允許定制字體、顏色、邊框和其它外觀因素??丶旧淼臉邮綄傩裕ㄈ缜熬吧?、背景色、字體和邊框樣式)將影響整個控件的表示。

此外,每個控件都包含與其所創建的項目類型相匹配的大量樣式屬性,如 as itemstyle、alternatingitemstyle 和 headerstyle。datagrid 提供第三級的樣式屬性,這些屬性將影響特定列的所有單元格??丶邪拿恳涣卸伎梢該碛衅渥约旱?headerstyle、footerstyle 和 itemstyle。

模板
樣式控制格式顯示,而模板則定義每個項目的內容和表示。您可以將模板看作 html 代碼片斷,它定義了用來表示項目的控件層次結構。

repeater 和 datalist 控件由您指定的模板來驅動,提供各種可設置的模板屬性,如 itemtemplate、alternatingitemtemplate 和 headertemplate。與樣式類似,每個模板都對應于一個特定類型的項目。

datagrid 控件未模板化。但是,控件的 column 集合中的 templatecolumns 使 datagrid 中模板的使用成為可能。templatecolumn 中的每個單元格都可以包含一個模板,這與 repeater 或 datalist 控件中的項目極為類似。這也使 datagrid 中的定制表示成為可能。

模板中的數據綁定
模板定義項目中包含的控件層次結構。通過使用數據綁定表達式,此層次結構中的控件屬性可綁定到與此項目相關聯的數據屬性上。

作為模板的邏輯父級的項目在數據綁定表達式中被稱為“容器”。每個容器都有一個稱為 dataitem 的屬性,該屬性引用其相關聯的數據。結果是,模板中的大多數典型數據綁定表達式都將控件屬性綁定到 container.dataitem 的某個屬性上。將在以下幾節介紹的示例中進一步說明這種綁定。

repeater 控件
如前面所述,repeater 控件是完全由模板驅動的,允許創建完全可定制的表示和布局。下圖說明了這一功能。



圖 2. 使用 repeater 控件生成的帶項目符號的鏈接列表

摘自 repeater1.aspx:

<%@ page language="c#" src="repeater1.cs" inherits="samples.repeater1page"%>
...

<asp:repeater runat=server id="linkslistrepeater"
  datasource='<%# sitelinks %>'>
  <template name="headertemplate">
    <ul type="1">
  </template>
  <template name="itemtemplate">
    <li>
      <asp:hyperlink runat=server
        text='<%# databinder.eval(container.dataitem, "sitename") %>'
        navigateurl='<%# databinder.eval(container.dataitem, "siteurl") %>'>
      </asp:hyperlink>
    </li>
  </template>
  <template name="footertemplate">
    </ul>
  </template>
</asp:repeater>

此 .aspx 文件顯示了一個用于生成帶項目符號列表的 repeater 控件的聲明。

此示例說明了用數據綁定語法 (<%#...%>) 設置數據源的聲明方法。當您調用 databind 方法時,數據綁定中的表達式就會被執行。在這種情況下,repeater 的 datasource 屬性被綁定到頁面的 sitelinks 屬性上,后者包含要顯示的 url 引用。

repeater 是唯一允許在其模板中存在 html 片段的控件,將 repeater 控件和 html 片段合在一起會產生良好形式的 html。在本示例中,帶項目符號的列表分為三個部分:

由 headertemplate 表示的列表開始標記 (<ul type="1">)。


由 footertemplate 表示的列表結束標記 (</ul>)。


列表的主體由通過為 sitelinks 集合中出現的每個對象重復 itemtemplate 而生成的列表項 (<li>) 置入。
您也可以使用這些模板在標頭中指定表的開始標記 (<table>),在注腳中指定表的結束標記(</table>),在每個項目中指定單個表行 (<tr>)。此替換選項將導致列表表示。

您必須指定 itemtemplate。它是唯一必需的模板。當未指定其它模板時,控件會自動將此 itemtemplate 用于其它模板。

在以下示例中,itemtemplate 包含一個 hyperlink web 控件。此控件的 text 和 navigateurl 屬性被綁定到與每個重復項目相關聯的數據屬性上。這又是使用數據綁定表達式(在創建項目后立即對該表達式求值)完成的。

repeater1.cs:

namespace samples {
    ...

    public class repeater1page : page {
        protected repeater linkslistrepeater;
        
        public icollection sitelinks {
            get {
                arraylist sites = new arraylist();

                sites.add(new siteinfo("microsoft home",
                                       "http://www.microsoft.com"));
                sites.add(new siteinfo("msdn home",
                                       "http://msdn.microsoft.com"));
                sites.add(new siteinfo("msn homepage",
                                       "http://www.msn.com"));
                sites.add(new siteinfo("hotmail",
                                       "http://www.hotmail.com"));
                return sites;
            }
        }

        protected override void onload(eventargs e) {
            base.onload(e);

            if (!ispostback) {
                // 首次請求該頁時即對其進行數據綁定 (databind)。
                // 這將在此頁的控件層次結構中遞歸調用每個控件。
                databind();
            }
        }
    }

    public sealed class siteinfo {
        private string sitename;
        private string siteurl;

        public siteinfo(string sitename, string siteurl) {
            this.sitename = sitename;
            this.siteurl = siteurl;
        }

        public string sitename {
            get { return sitename; }
        }
        public string siteurl {
            get { return siteurl; }
        }
    }
}

此 .cs 文件包含隨前一個列表中的 aspx 頁一起出現的代碼。

repeater1page 類覆蓋了 page 類的 onload 方法。此表示在對該頁的首次請求中調用 databind。這將導致對這些頁上的數據綁定表達式求值并使 repeater 控件列舉數據源以及創建其項目。僅在首次請求時調用 databind 方法。這之所以能正常工作是因為 repeater 能夠在從前一次保存狀態的回傳過程中重新創建其項目,而無需數據源實例。

此頁將類型 icollection 的公用屬性顯露出來。這將在設置 repeater 的 datasource 屬性值的數據綁定表達式中使用。屬性的獲取實現使用包含一組 siteinfo 對象序列的 arraylist。此屬性是公用的,因為只有頁類的公用和保護成員可在數據綁定表達式中使用。

每個 siteinfo 對象有兩個屬性:sitename 和 siteurl。當對模板中的 hyperlink 控件進行數據綁定時將訪問這些屬性。在此控件的綁定表達式中,container.dataitem 表示要將特定項綁定到其上的單個 siteinfo 對象。databinder.eval(container.dataitem, "sitename") 訪問當前 siteinfo 對象的 sitename 屬性。

repeater1 示例向您介紹了幾個基本概念:

定義模板


模板中的數據綁定語法和數據綁定表達式


將 arraylist 的 icollection 表示用作數據源


在最初處理頁的過程中調用 databind 方法
datalist 控件
datalist 控件是一個模板化控件,它提供使用樣式屬性可視化地格式化其表示的能力。它也可以產生多列布局。圖 3 說明了這兩種特性。



圖 3. 從 datalist 的雙列表示生成的示例

摘自 datalist1.aspx:

<%@ page language="c#" src="datalist1.cs" inherits="samples.datalist1page"%>
...

<asp:datalist runat=server id="peopledatalist"
  repeatcolumns="2" repeatdirection="vertical" repeatmode="table"
  width="100%">

  <property name="alternatingitemstyle">
    <asp:tableitemstyle backcolor="#eeeeee"/>
  </property>
  <template name="itemtemplate">
    <asp:panel runat=server font-size="12pt" font-bold="true">
      <%# ((person)container.dataitem).name %>
    </asp:panel>
    <asp:label runat=server width="20px"
      borderstyle="solid" borderwidth="1px" bordercolor="black"
      backcolor='<%# ((person)container.dataitem).favoritecolor %>'> 
    </asp:label>
     
    <asp:label runat=server font-size="10pt"
      text='<%# getcolorname(((person)container.dataitem).favoritecolor) %>'>
    </asp:label>
  </template>
</asp:datalist>

此 .aspx 文件顯示了用來生成此示例的 datalist 的聲明。

在此示例中,datalist 的多列布局是通過將 repeatcolumns 屬性設置為“2”來實現的。將 repeatdirection 設置為“vertical”會使項目從上到下、然后從左到右排列。相反,值設置為“horizontal”會導致項目從左到右、然后從上到下排列。

aspx 語法包含對少數幾種 datalist 的樣式屬性的設置。在此示例中,datalist 的 width 被設置為其父級的 100%。設置具有灰色背景的 alternatingitemstyle 是為了獲得帶有條紋的外觀。此示例還說明模板可以包含任意復雜的控件定義,以滿足在每個項目內獲得理想布局的需要。

最后,此模板中的數據綁定表達式通過將 container.dataitem 轉換為其類型來使用前期綁定。這不會招致與使用 databinder.eval (如 repeater1 中所示) 相關聯的后期綁定的代價。但是,這種方法可能會產生可讀性較差的表達式。以下示例還給出了一個調用 getcolorname 方法(該方法是在本頁有代碼支持的文件中實現的)的表達式示例。

datalist1.cs:

namespace samples {
    ...

    public class datalist1page : page {
        protected datalist peopledatalist;

        protected string getcolorname(color c) {
            return
              typedescriptor.getconverter(typeof(color)).converttostring(c);
        }
        
        private void loadpeoplelist() {
            // 創建數據源
            person[] people = new person[] {
                new person("nikhil kothari", color.green),
                new person("steve millet", color.purple),
                new person("chris anderson", color.blue),
                new person("mike pope", color.orange),
                new person("anthony moore", color.yellow),
                new person("jon jung", color.mediumaquamarine),
                new person("susan warren", color.slateblue),
                new person("izzy gryko", color.red)
            };

            // 設置控件的數據源
            peopledatalist.datasource = people;

            // 并使該控件用此數據源構建其項目
            peopledatalist.databind();
        }

        protected override void onload(eventargs e) {
            base.onload(e);

            if (!ispostback) {
                // 首次請求此頁
                loadpeoplelist();
            }
        }
    }

    public sealed class person {
        private string name;
        private color favoritecolor;

        public person(string name, color favoritecolor) {
             this.name = name;
             this.favoritecolor = favoritecolor;
        }

        public color favoritecolor {
            get { return favoritecolor; }
        }
        public string name {
            get { return name; }
        }
    }
}

在此頁中,控件的 datasource 屬性是通過程序設置的,與在 aspx 文件中聲明性地設置相對。兩種方法的結果相同。無法選擇哪種方法,都必須調用 databind 方法,以便控件可以列舉其數據源并創建它要表示的項目。

此示例中所用的數據源是 person 對象的一個簡單數組。由于每個數組都實現 icollection 方法,所以數組適合用作數據源。這顯示了將數據結構和類型用作數據源時可獲得的靈活程度。

datalist1 示例介紹了下列概念:

在模板中定義豐富的 html ui


使用簡單數組作為數據源


通過程序設置數據源


數據綁定語法中所允許的各種表達式
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品免费在线视频| 91色琪琪电影亚洲精品久久| 91sa在线看| 欧美肥婆姓交大片| 久久久亚洲网站| 欧美俄罗斯乱妇| 欧美日韩国产限制| 亚洲精品国精品久久99热一| 51久久精品夜色国产麻豆| 欧美激情中文字幕乱码免费| 亚洲综合社区网| 欧美日韩精品二区| 国产丝袜高跟一区| 最近2019年中文视频免费在线观看| 性色av一区二区三区在线观看| 久久久精品一区| 曰本色欧美视频在线| 91精品国产综合久久久久久蜜臀| 免费97视频在线精品国自产拍| 国产日产欧美a一级在线| 96pao国产成视频永久免费| 国产在线a不卡| 日韩欧美亚洲一二三区| 日韩av电影手机在线| 久久久久国产精品一区| 美日韩精品免费观看视频| 成人精品福利视频| 国产精品成人一区二区三区吃奶| 亚洲在线视频观看| 亚洲成av人影院在线观看| 国产精品成熟老女人| 国产精品第七影院| 欧美交受高潮1| 欧美寡妇偷汉性猛交| 国内精品小视频| 欧美高清无遮挡| 日韩不卡在线观看| 国产精品久久久久久久9999| 国产精品丝袜久久久久久高清| 91免费高清视频| 一区二区在线视频播放| 欧美乱大交xxxxx| 九九久久国产精品| 亚洲精品98久久久久久中文字幕| 欧美日韩不卡合集视频| 福利微拍一区二区| 久久精品国产精品| 欧美亚洲成人精品| 欧美日韩国产一中文字不卡| 国产精品视频99| 国产精品777| 国产视频观看一区| 欧美日韩一区二区免费在线观看| 456亚洲影院| 亚洲欧美国产精品| 中文字幕av日韩| 亚洲欧美中文字幕在线一区| 热久久免费国产视频| 日韩av综合网站| 欧美一级片免费在线| 久色乳综合思思在线视频| 国产精品嫩草视频| 亚洲乱码av中文一区二区| 久久最新资源网| 国产精品ⅴa在线观看h| 亚洲影影院av| 亚洲欧美制服中文字幕| 国产福利精品av综合导导航| 欧美极品在线视频| 日韩风俗一区 二区| 亚洲美女动态图120秒| 国产噜噜噜噜久久久久久久久| 成人在线视频福利| 91精品视频网站| 色青青草原桃花久久综合| 欧美日韩亚洲国产一区| 95av在线视频| 亚洲欧洲偷拍精品| 午夜精品一区二区三区在线视频| 久久亚洲国产精品成人av秋霞| 日韩一区二区福利| 国产成人综合久久| 在线播放国产一区中文字幕剧情欧美| 久久久久久高潮国产精品视| 日本亚洲欧美成人| 亚洲老板91色精品久久| 日本精品性网站在线观看| 欧美激情一区二区三区久久久| 日韩美女在线播放| 亚洲毛茸茸少妇高潮呻吟| 亚洲国产精品久久久久秋霞蜜臀| 国产精品永久免费视频| 久久九九国产精品怡红院| 91亚洲国产成人精品性色| 欧美高清视频一区二区| 亚洲美女喷白浆| 国产成人激情小视频| 国产午夜精品全部视频在线播放| 国语自产精品视频在免费| 国产亚洲精品美女久久久久| 欧美大片在线影院| 成人一区二区电影| 91国偷自产一区二区三区的观看方式| 午夜精品美女自拍福到在线| 日韩第一页在线| 日韩成人在线电影网| 亚洲精品wwww| 欧美大片免费观看| 久久久久久69| 久久91亚洲人成电影网站| 欧美中文在线字幕| 国产精品九九久久久久久久| 9.1国产丝袜在线观看| 日韩中文视频免费在线观看| 欧美激情xxxx性bbbb| 欧洲亚洲女同hd| 乱亲女秽乱长久久久| 亚洲第一免费播放区| 国产精品视频永久免费播放| 久久天堂av综合合色| 欧美丰满片xxx777| 久久精视频免费在线久久完整在线看| 韩国日本不卡在线| 欧美视频国产精品| 中文字幕免费精品一区| 国产精品久久久久91| 色小说视频一区| 一区二区欧美久久| 97免费视频在线| 亚洲一区av在线播放| 日韩精品久久久久久福利| 亚洲r级在线观看| 国产精品91久久久| 欧美丰满少妇xxxxx做受| 国产精品1234| 国产精品日韩专区| 91免费欧美精品| 亚洲国产精品久久久| 亚洲国产日韩欧美在线99| 日韩精品中文字幕有码专区| 欧美成人免费全部观看天天性色| 亚洲成av人乱码色午夜| 亚洲欧美变态国产另类| 5566日本婷婷色中文字幕97| 国产福利精品视频| 亚洲精品免费在线视频| 久久久久久中文| 高潮白浆女日韩av免费看| 亚洲国产精品电影在线观看| 久久精品成人动漫| 国产精品美女久久| 亚洲精品99999| 精品久久久一区二区| 久久久免费在线观看| 日韩欧美一区二区三区| 成人黄色片网站| 色噜噜国产精品视频一区二区| 国产91ⅴ在线精品免费观看| 成人国产亚洲精品a区天堂华泰| 欧美成人午夜免费视在线看片| 亚洲欧美一区二区三区四区| 国产一区二中文字幕在线看| 国产小视频国产精品| 欧美国产日韩一区二区在线观看|