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

首頁 > 編程 > ASP > 正文

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

2024-05-04 11:06:24
字體:
來源:轉載
供稿:網友
datagrid 控件
datagrid 控件使您可以生成數據源格式豐富的列表表示。此外,它還支持隨其它操作選擇項目。

本節的四個示例使用包含有關書名信息(標題、標題 id、作者、價格和出版日期)的表。全部數據都用 titlesdb.xml 中的 xml 予以維持。在建立頁面來表示此表的內容并選擇書籍時,這些示例遵循增量方法。代碼列表包含黑體文本,以表明一個示例構建于以前示例時所作的更改。

截自 titlesdb.xml:

<root>
<schema id="documentelement" targetnamespace=""
        xmlns=http://www.w3.org/1999/xmlschema
        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <element name="title">
        <complextype content="elementonly">
            <element name="title_id" type="string"></element>
            <element name="title" type="string"></element>
            <element name="au_name" type="string"></element>
            <element name="price" msdata:datatype="system.currency"
                     minoccurs="0"
                     type="string"></element>
            <element name="pubdate" type="timeinstant"></element>
        </complextype>
        <unique name="titleconstraint" msdata:primarykey="true">
            <selector>.</selector>
            <field>title_id</field>
        </unique>
    </element>
</schema>
<documentelement>
    <title>
        <title_id>bu1032</title_id>
        <title>the busy executive's database guide</title>
        <au_name>marjorie green</au_name>
        <price>19.99</price>
        <pubdate>1991-06-12t07:00:00</pubdate>
    </title>
    ...
</documentelement>
</root>

在典型的 web 應用程序中,為了獲得最大的可伸縮性和性能上的好處,很可能會使用 web 服務或商業對象來存取數據。為了簡化這些示例并將注意力集中在使用 datagrid 而不是數據存取上,我們選擇在應用程序啟動時一次性加載數據,并在 global.asax 中的 asp 應用程序狀態中高速緩存所得的 dataset,如下所示。

截自 global.asax:

public void application_onstart() {
    filestream fs = null;
    dataset ds = null;

    try {
        fs = new filestream(server.mappath("titlesdb.xml"), filemode.open,
                            fileaccess.read);
        ds = new dataset();

        // 將 xml 文件中的數據加載到 dataset 中
        ds.readxml(fs);
    } finally {
        if (fs != null) {
            fs.close();
            fs = null;
        }
    }

    // 將數據集高速緩存到應用程序狀態中,以便在單個頁面中使用
    application["titlesdataset"] = ds;
}

datagrid1
datagrid1 說明 datagrid 的基本用法,說明控件如何用最少的用戶代碼生成表示來提供豐富的功能。



圖 4. 通過使用具有自動生成列的 datagrid 產生的示例

截自 datagrid1.aspx:

<%@ page language="c#" src="datagrid.cs" inherits="samples.datagridpage"%>
...

<asp:datagrid runat=server id="titlesgrid">
</asp:datagrid>

上面的 .aspx 文件顯示在不設置 datagrid 控件任何屬性的情況下對其進行聲明。

datagrid.cs:

namespace samples {
    ...

    public class datagridpage : page {
        protected datagrid titlesgrid;

        public icollection gettitleslist() {
            // 從在應用程序狀態中高速緩存的 dataset 中檢索標題列表。
            dataset titlesdataset = (dataset)application["titlesdataset"];

            if (titlesdataset != null) {
                return titlesdataset.tables["title"].defaultview;
            }
            else {
                return null;
            }
        }

        private void loadtitlesgrid() {
            // 從數據庫中檢索數據
            icollection titleslist = gettitleslist();

            // 設置控件的數據源
            titlesgrid.datasource = titleslist;

            // 并使它用此數據源構建其項目
            titlesgrid.databind();
        }

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

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

.cs 文件包含用于此頁的代碼。此代碼與 datalist1 示例中使用的代碼功能相同。在對此頁的首次請求中,它覆蓋 onload 方法以檢索數據并在調用 databind 之前設置控件的 datasource 屬性。這將使 datagrid 創建其項目,這些項目是表中必要的行。在回傳處理的過程中,datagrid 從狀態(該狀態包括在上一次請求中所保存的單元格內容)重新創建項目。

此示例說明了 datagrid 控件的 autogeneratecolumns 屬性的功能。此屬性的默認值為 true。當設置為 true 時,datagrid 將使用 reflection 檢查其數據源和對象,并為每個公用屬性或字段創建一個列。在此示例中,控件表示“標題”表中當前的所有字段。這一功能允許用最少的用戶代碼快速而容易地生成任何數據源的列表表示。

每個自動生成列的類型都是 boundcolumn。這種列類型將與其關聯的屬性值轉換為要用作窗體元格文本的字符串。

datagrid2
datagrid2 說明具有在 .aspx 文件中定義的 columns 集合的 datagrid。



圖 5. 通過使用具有指定列的 datagrid 產生的示例

摘自 datagrid2.aspx:

<%@ page language="c#" src="datagrid.cs" inherits="samples.datagridpage"%>
...

<asp:datagrid runat=server id="titlesgrid"
     autogeneratecolumns="false">
  <property name="columns">
    <asp:boundcolumn headertext="title" datafield="title"/>
    <asp:boundcolumn headertext="author" datafield="au_name"/>
    <asp:boundcolumn headertext="date published" datafield="pubdate"/>
    <asp:boundcolumn headertext="price" datafield="price"/>
  </property>
</asp:datagrid>

此 .aspx 文件顯示了一個具有用戶指定的列集合的 datagrid 控件。此示例使用與 datagrid1 相同的有代碼支持的文件,因為不需要更改任何代碼。

datagrid 的 autogeneratecolumns 屬性被設置為假,從而阻止控件自動生成列,而讓用戶負責定義將要在表中表示的列。

有許多好處:

您可控制列的順序。以聲明的順序表示列。另一方面,自動生成的列是按用映像檢索到的順序表示的,此順序不必與代碼中的列順序或數據庫表本身的列順序相匹配。


可以用列的 headertext 屬性來指定每列的標頭。在前一個示例中,列標頭指明了字段名,這可能并不合適。當在此模式下使用控件時,columns 還提供其它可設置的屬性。


自動生成的列的類型始終是 boundcolumn。指定列集合使用戶可以控制每列的類型。
datagrid3
datagrid3 通過添加可視格式化和內容格式化構建于 datagrid2 之上。



圖 6. 由設置了樣式和格式化屬性的 datagrid 產生的示例

摘自 datagrid3.aspx:

<%@ page language="c#" src="datagrid.cs" inherits="samples.datagridpage"%>
...

<asp:datagrid runat=server id="titlesgrid"
     autogeneratecolumns="false"
     width="80%"
     backcolor="white"
     borderwidth="1px" borderstyle="solid" cellpadding="2" cellspacing="0"
     bordercolor="tan"
     font-name="宋體" font-size="8pt">
  <property name="columns">
    <asp:boundcolumn headertext="title" datafield="title"/>
    <asp:boundcolumn headertext="author" datafield="au_name"/>
    <asp:boundcolumn headertext="date published" datafield="pubdate"
         dataformatstring="{0:mmm yyyy}"/>
    <asp:boundcolumn headertext="price" datafield="price"
      dataformatstring="{0:c}">
      <property name="itemstyle">
        <asp:tableitemstyle horizontalalign="right"/>
      </property>
    </asp:boundcolumn>
  </property>

  <property name="headerstyle">
    <asp:tableitemstyle backcolor="darkred" forecolor="white"
      font-bold="true"/>
  </property>
  <property name="itemstyle">
    <asp:tableitemstyle forecolor="darkslateblue"/>
  </property>
  <property name="alternatingitemstyle">
    <asp:tableitemstyle backcolor="beige"/>
  </property>
</asp:datagrid>

此 .aspx 文件顯示了與前面相同的 datagrid 控件聲明,并設置了各種樣式屬性。這將導致視覺上更具吸引力的表示。仍就不需要對代碼進行任何更改,使用與以前示例相同的有代碼支持的文件。

因為它是從 webcontrol 得到的,所以 datagrid 控件繼承了諸如 width、backcolor、borderstyle 和 font.name 之類的樣式屬性。此外,datagrid 提供諸如 cellpadding 這樣的屬性,這些屬性是特定于表的。這些屬性允許從總體上定制控件。

聲明還顯示了設置的若干項目樣式,如 headerstyle 和 alternatingitemstyle。這些樣式控制著它們相應項目的外觀。請注意此示例中出現的樣式合并。備選項目與一般項目的前景色相同,因為它們的樣式是 alternatingitemstyle 和 itemstyle 的組合。最后,此示例還通過右對齊價格列中的文本說明了為特定列設置樣式。

datagrid 還允許您格式化其單元格中的文本內容。這是通過設置 boundcolumn 的 dataformatstring 屬性值完成的。該列使用其格式說明格式化使用 string.format 的單元格內容。此屬性可隨格式化類型(如日期或貨幣)一起預置或附加任意內容。此外,由于格式化考慮了當前頁的 cultureinfo 和請求,所以它也支持全局化。如果未指定格式,則使用該值的 tostring 方法。

datagrid4
datagrid4 說明如何通過處理 selectedindexchanged 事件來利用 datagrid 中的選擇。



圖 7. 由允許選擇其包含項目的 datagrid 產生的示例

截自 datagrid4.aspx:

<%@ page language="c#" src="datagrid4.cs" inherits="samples.datagrid4page"%>
...

<asp:datagrid runat=server id="titlesgrid"
     autogeneratecolumns="false"
     width="80%"
     backcolor="white"
     borderwidth="1px" borderstyle="solid" cellpadding="2" cellspacing="0"
     bordercolor="tan"
     font-name="宋體" font-size="8pt"
     datakeyfield="title_id"
     onselectedindexchanged="onselectedindexchangedtitlesgrid">
  <property name="columns">
    <asp:buttoncolumn text="select" command="select"/>
    <asp:boundcolumn headertext="title" datafield="title"/>
    <asp:boundcolumn headertext="author" datafield="au_name"/>
    <asp:boundcolumn headertext="date published" datafield="pubdate"
         dataformatstring="{0:mmm yyyy}"/>
    <asp:boundcolumn headertext="price" datafield="price"
      dataformatstring="{0:c}">
      <property name="itemstyle">
        <asp:tableitemstyle horizontalalign="right"/>
      </property>
    </asp:boundcolumn>
  </property>

  <property name="headerstyle">
    <asp:tableitemstyle backcolor="darkred" forecolor="white"
      font-bold="true"/>
  </property>
  <property name="itemstyle">
    <asp:tableitemstyle forecolor="darkslateblue"/>
  </property>
  <property name="alternatingitemstyle">
    <asp:tableitemstyle backcolor="beige"/>
  </property>
  <property name="selecteditemstyle">
    <asp:tableitemstyle backcolor="palegoldenrod" font-bold="true"/>
  </property>  
</asp:datagrid>
...
<asp:label runat=server id="selectioninfolabel" font-name="宋體" font-size="8pt"/>
在此 .aspx 文件中,為 datagrid 的 selectedindexchanged 事件注冊了一個事件處理程序。此事件處理程序是在有代碼支持的文件中實現的。已在列集合中添加了一個命令 為“select”的 buttoncolumn,使得 datagrid 為每個項目表示一個包含 select 按鈕的附加列。同時指定了 selecteditemstyle。此樣式用于從視覺上區分選定的項目。最后還指定了 datagrid 的 datakeyfield 屬性。此字段將置入 datagrid 的 datakeys 集合,該集合將在有代碼支持的文件中用到。

datagrid4.cs:

namespace samples {
    ...

    public class datagrid4page : page {
        protected datagrid titlesgrid;
        protected label selectioninfolabel;

        public icollection gettitleslist() {
            // 從在應用程序狀態中高速緩存的 dataset 中檢索標題列表。
            dataset titlesdataset = (dataset)application["titlesdataset"];

            if (titlesdataset != null) {
                return titlesdataset.tables["title"].defaultview;
            }
            else {
                return null;
            }
        }

        private void loadtitlesgrid() {
            // 從數據庫中檢索數據
            icollection titleslist = gettitleslist();

            // 設置控件的數據源并重新設置其選擇,
            titlesgrid.datasource = titleslist;
            titlesgrid.selectedindex = -1;

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

            // 更新選定的標題信息
            updateselectedtitleinfo();
        }

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

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

        // 處理 datagrid 的 onselectedindexchanged 事件
        protected void onselectedindexchangedtitlesgrid(object sender,
                                                        eventargs e) {
            updateselectedtitleinfo();
        }

        private void updateselectedtitleinfo() {
            // 獲取選定的索引
            int selindex = titlesgrid.selectedindex;
            string seltitleid = null;
            string selectioninfo;

            if (selindex != -1) {
                // 顯示選定標題的關鍵字段
                seltitleid = (string)titlesgrid.datakeys[selindex];
                selectioninfo = "id of selected title: " + seltitleid;
            }
            else {
                selectioninfo = "no title is currently selected.";
            }

            selectioninfolabel.text = selectioninfo;
        }
    }
}

此 .cs 文件包含處理 selectedindexchanged 事件以及在 datagrid 下顯示選定標題的 id 的邏輯。datagrid 處理命令事件,該事件是通過包含在其項目中的按鈕觸發的。它識別標準命令“select”,該命令使其更改它的 selectedindex 屬性,并通過觸發此事件來將此更改通知用戶的代碼。

在實現事件處理程序的過程中,示例代碼調用 updateselectedtitleinfo 方法。該方法負責顯示有關選定書名的信息,本例中為標題的 id。在更現實的方案中,此 id 可用來鏈接某個頁面,以顯示有關選定標題的更多詳細信息。

id 是通過訪問 datakeys 集合進行檢索的。該集合是因為設置了 datakeyfield 屬性而置入的。通常,將它設置為主關鍵字或使用戶可以唯一標識項目的某些其它字段,并將此信息用作后續的數據庫查詢或過濾數據中的準則。

此示例說明除了僅僅表示數據源中的對象之外,如何進一步支持諸如選擇數據源中對象之類的操作。datagrid 包含對若干其它特性(如排序、分頁、現場編輯和 templatecolumns)的支持。但是,這些特定特性超出了本文的討論范圍,將在以后的文章中加以探討。

repeater、datalist 或 datagrid?
repeater、datalist 和 datagrid 控件共享公用編程模型。同時,每個控件都被設計為側重某個特定方案,為正確的方案選擇正確的列表綁定控件是一個重要的決策。本節說明控件層次結構和每種控件的功能,以及每種控件可能用于的典型方案的示例。

正如在下面的類層次結構中看到的那樣,repeater 是一種小巧輕便的控件。它只繼承了基本control類的功能,如 id 屬性和子控件集合。另一方面,datalist 控件和 datagrid 控件都繼承了 webcontrol 功能,如樣式和外觀屬性。



圖 8. 列表綁定控件的類層次結構

在對象模型方面,repeater 控件是最簡單的控件。它同時也是最小的數據綁定控件并且基本上是不同的,即它不會強制使用任何特殊的 ui 布局。最后的表示遵循生成文本的方法,其方式是通過重復為此控件指定的模板內容。此控件對樣式和外觀屬性或行為不提供任何內建的支持。對于需要完全控制表示的方案而言,它是一個極好的選擇。

datalist 控件是強制使用分列布局或流布局的 repeater。它繼承了 webcontrol 中實現的外觀屬性,并增加了適用于它所創建的項目的其它樣式屬性。datalist 控件還包括對其項目標準操作(如選擇、編輯和刪除)的支持。它很適用于生成分布于一列或多列的水平或垂直的項目序列流。

datagrid 控件強制使用列或行的列表布局。與 datalist 類似,此控件提供樣式和外觀屬性。除選擇和編輯之外,datagrid 還支持對整個項目集合的高級操作,如分頁和排序。datagrid 和 datalist 的一個主要區別是 datagrid 不包含任何模板屬性,即 datagrid 控件的項目或行是非模板化的。但是,將 templatecolumn 添加到 datagrid 中就可以在特定列中使用模板。

下表是列表綁定控件所提供的功能的摘要。

功能 repeater datalist datagrid
模板 是(必需) 是(必需) 列內(可選)
列表布局 否 否 是
流布局 是 是 否
分列/報紙欄目樣式布局 否 是 否
樣式和外觀屬性 否 是 是
選擇 否 是 是
編輯 否 是 是
刪除 否 是 是
分頁 否 否 是
排序 否 否 是


相關資源
隨 microsoft .net framework sdk 發布的 quickstart 示例包含這些控件的若干示例,以及說明使用 xml 和 web 服務存取數據的示例。sdk 附帶的文檔包括相關主題的概念性資料,如 asp+ 頁面框架和服務器控件,以及說明作為此框架一部分的控件的對象模型的參考書目。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性视频1819p久久| 日韩欧美福利视频| 欧美视频专区一二在线观看| 91久久精品国产91性色| 欧美三级欧美成人高清www| 欧美成人免费一级人片100| 正在播放国产一区| 97超级碰碰碰久久久| 国产精品成人免费视频| 国产91在线播放| 国产精品成人一区| 久久全国免费视频| 日韩电影中文 亚洲精品乱码| 中日韩美女免费视频网站在线观看| 亚洲四色影视在线观看| 日韩中文字幕第一页| 欧美在线视频网站| 中文字幕免费精品一区| 亚洲理论片在线观看| 欧美多人乱p欧美4p久久| 91av在线国产| 国产精品无码专区在线观看| 亚洲男人天堂网站| 亚洲国内精品视频| 一区二区成人av| 日本在线观看天堂男亚洲| 日日噜噜噜夜夜爽亚洲精品| 日本国产一区二区三区| 在线播放精品一区二区三区| 亚洲国产中文字幕在线观看| 韩国一区二区电影| 91国产精品视频在线| 亚洲精品免费一区二区三区| 成人亚洲综合色就1024| 97精品国产97久久久久久春色| 国产精品亚洲自拍| 欧美中文在线观看国产| 精品综合久久久久久97| 国产视频久久久久久久| 久久精品国产综合| 国产成人在线亚洲欧美| 北条麻妃一区二区在线观看| 久久精品中文字幕一区| 国产精品国产三级国产aⅴ9色| 亚洲精品一区中文字幕乱码| 亚洲欧美日韩中文视频| 国产视频亚洲精品| 中文字幕在线看视频国产欧美| 最近2019好看的中文字幕免费| 久久精品国产亚洲7777| 久久伊人精品天天| 欧美日韩中国免费专区在线看| 久久亚洲春色中文字幕| 91视频国产一区| 欧美成人手机在线| 亚洲剧情一区二区| 欧美日韩视频在线| www.日韩不卡电影av| 在线精品国产成人综合| 国产精品久久久亚洲| 亚洲欧美自拍一区| 成人激情在线观看| 欧美黄色片在线观看| 欧美日韩激情小视频| 亚洲风情亚aⅴ在线发布| 亚洲女人天堂视频| 色综合久久88色综合天天看泰| 日韩中文在线视频| 国产日韩欧美中文在线播放| 久久人人97超碰精品888| 动漫精品一区二区| 色偷偷噜噜噜亚洲男人| 久久久久久久久久久久av| 国内精品400部情侣激情| 91国产精品视频在线| 日本乱人伦a精品| 国内精品在线一区| 久热在线中文字幕色999舞| 欧美激情亚洲视频| 亚洲综合成人婷婷小说| 亚洲欧美中文日韩v在线观看| 亚洲国产97在线精品一区| 成人黄色av免费在线观看| 欧美刺激性大交免费视频| 91亚洲国产精品| 国内精品久久影院| 精品国产31久久久久久| 亚洲第一福利视频| 51ⅴ精品国产91久久久久久| 久久成人人人人精品欧| 91精品久久久久久久久久另类| 97精品国产97久久久久久| 久久综合久久八八| 色哟哟网站入口亚洲精品| 亚洲国语精品自产拍在线观看| 日韩精品免费在线观看| 亚洲香蕉成人av网站在线观看| 日韩精品黄色网| 精品网站999www| 国产精品久久久久久久久久新婚| 91丝袜美腿美女视频网站| 这里只有视频精品| 欧美日韩国产黄| 亚洲人成网站999久久久综合| 视频在线观看99| 日韩中文字幕国产| 国内揄拍国内精品少妇国语| 国产精品久久久久久久久久久久| 国产亚洲精品久久久优势| 亚洲精品一区二区在线| 最近2019中文字幕第三页视频| 97超级碰碰碰| 精品欧美激情精品一区| 欧美激情一区二区三区在线视频观看| 亚洲精品免费在线视频| 日韩欧美a级成人黄色| 久久中文久久字幕| 亚洲精品短视频| 中文字幕日韩有码| 久久电影一区二区| 欧美成人精品在线播放| 日韩在线视频网| 亚洲爱爱爱爱爱| 欧美精品日韩三级| 精品五月天久久| 中文字幕亚洲一区二区三区五十路| 97成人精品视频在线观看| 日韩中文字幕视频| 久久综合久久美利坚合众国| 欧美激情一区二区三区久久久| 国产精品狼人色视频一区| 欧美日韩免费网站| 欧美性猛交xxxx| 夜夜嗨av一区二区三区免费区| 国产欧美一区二区三区在线看| 欧美www在线| 欧洲亚洲免费视频| 国产伊人精品在线| 亚洲女人天堂av| 色综合视频一区中文字幕| 国产成人+综合亚洲+天堂| 亚洲视屏在线播放| 日韩免费在线免费观看| 欧美在线激情视频| 日本一区二三区好的精华液| 97精品国产97久久久久久春色| 亚洲视频视频在线| 欧美在线视频在线播放完整版免费观看| 日韩av影院在线观看| 色爱av美腿丝袜综合粉嫩av| 色婷婷亚洲mv天堂mv在影片| 日韩久久午夜影院| 国产91在线高潮白浆在线观看| 久久成人在线视频| 91久久精品久久国产性色也91| 亚洲精品在线91| 日韩第一页在线| 亚洲午夜未满十八勿入免费观看全集| 成人国产在线视频| 久久亚洲电影天堂| 亚洲第一天堂av| 日韩中文字幕在线视频| 亚洲偷欧美偷国内偷| 欧美疯狂性受xxxxx另类|