版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第10章章數(shù)據(jù)綁定控件與數(shù)據(jù)源控件本章要點本章要點數(shù)據(jù)源控件的概念及其用法編程實現(xiàn)數(shù)據(jù)綁定的方法GridView、DataList、Repeater、DetailsView、FormView控件用法ListView控件和DataPager控件的用法模板和數(shù)據(jù)綁定表達式的概念和用法10.1 概述概述Web應用程序一般都離不開數(shù)據(jù)庫。ASP.NET提供了多個數(shù)據(jù)控件用來在WEB頁面上展示數(shù)據(jù)庫中的數(shù)據(jù)。數(shù)據(jù)控件主要分兩類:數(shù)據(jù)綁定控件,用來在頁面上顯示數(shù)據(jù);數(shù)據(jù)源控件,用來提供對不同類型數(shù)據(jù)源的訪問,如數(shù)據(jù)庫、XML文件或中間層業(yè)務對象,并從中檢索數(shù)據(jù)。數(shù)據(jù)綁定控件可以綁定到數(shù)據(jù)源而無需手動編寫
2、代碼,降低了編程難度。數(shù)據(jù)源控件還支持修改數(shù)據(jù)的功能。常用的數(shù)據(jù)源控件用于訪問Microsoft SQL Server、OLE DB、ODBC或Oracle數(shù)據(jù)庫的SqlDataSource控件。用于訪問SQL Server時,還支持高級緩存功能。當數(shù)據(jù)作為 DataSet 對象返回時,此控件還支持排序、篩選和分頁。用于訪問Microsoft Access數(shù)據(jù)庫的AccessDataSource控件;用于訪問XML文件的XmlDataSource控件;用于訪問站點地圖文件的SiteMapDataSource控件;N層架構應用程序下使用的ObjectDataSource控件等。數(shù)據(jù)綁定控件列表控
3、件BulletedList、 CheckBoxList、 DropDownList、 ListBox 、 RadioButtonList表格式數(shù)據(jù)綁定控件GridView 、 DataList 、 Repeater 、 DetailsView 、 FormView 、 ListView控件層次數(shù)據(jù)綁定控件Menu、TreeView控件10.2數(shù)據(jù)源控件數(shù)據(jù)源控件SqlDataSource類是基于ADO.NET構建的,它以聲明控件的方式,而不是編程的方式使用這些對象。SqlDataSource控件屬于不可見控件,即它放在頁面上,但是不會呈現(xiàn)任何內容。通常需要將它和其他控件一起使用來顯示和編輯數(shù)據(jù)
4、庫數(shù)據(jù),如GridView、FormView等控件,使用數(shù)據(jù)源控件可以快速構建ASP.NET WEB數(shù)據(jù)庫應用程序,非常適合于初學者建立一些小型WEB站點。但是,在構建復雜的多層應用程序時,使用SqlDataSource等數(shù)據(jù)源控件并不合適。因為SqlDataSource數(shù)據(jù)源控件將數(shù)據(jù)訪問層和用戶界面層混在一起。如果要構建框架清晰的多層應用程序,就應該使用ObjectDataSource控件展現(xiàn)數(shù)據(jù)庫數(shù)據(jù),或自己通過編程手段實現(xiàn)。數(shù)據(jù)源控件應用舉例數(shù)據(jù)源控件應用舉例【例10-1】用戶在系統(tǒng)中注冊(regV3.aspx頁面)時,需要填寫學生詳情信息,包括系別、專業(yè)和班級信息。當頁面加載時,系統(tǒng)
5、首先初始化系別信息;當用戶選擇一個系別后,系統(tǒng)將在專業(yè)下拉框中顯示該系別所有的專業(yè);某一專業(yè)一旦被選中,班級列表框將顯示該專業(yè)下所有的班級。學生詳情界面設計如圖10-1所示。數(shù)據(jù)庫連接串的保存與使用數(shù)據(jù)庫連接串的保存與使用表示對Web.config文件中ConnectionStrings節(jié)ConnectionString的引用。SqlDataSource控件支持的類型參數(shù)控件支持的類型參數(shù)Parameter表示一個任意的靜態(tài)值。對應圖10-9中【源】下拉框中的【None】;ControlParameter表示一個控件值或頁面的屬性值。對應圖10-9中【源】下拉框中的【Control】;Cook
6、ieParameter表示瀏覽器的cookie值。對應圖10-9中【源】下拉框中的【Cookie】;FormParameter表示一個HTML表單字段的值。對應圖10-9中【源】下拉框中的【Form】;ProfileParameter表示一個配置文件屬性值。對應圖10-9中【源】下拉框中的【Profile】;QueryStringParameter表示查詢字符串字段中的值。對應圖10-9中【源】下拉框中的【QueryString】;SessionParameter表示一個存儲在Session對象中的對象的值。對應圖10-9中【源】下拉框中的【Session】;10.3 GridView控件控件
7、GridView控件是ASP.NET 2.0引入的一個新控件,是ASP.NET 1.x版本中DataGrid控件的升級版本。GridView是功能最多、最復雜、應用最廣泛的ASP.NET控件之一。它可以用來顯示、選擇、排序、分頁和編輯數(shù)據(jù)庫記錄。10.3.1 顯示數(shù)據(jù)顯示數(shù)據(jù)GridView控件將數(shù)據(jù)項呈現(xiàn)在一個HTML表格中,每個數(shù)據(jù)項呈現(xiàn)為一個獨立的HTML行。GridView控件支持聲明控件支持聲明式數(shù)據(jù)綁定和編程式數(shù)據(jù)綁定。式數(shù)據(jù)綁定和編程式數(shù)據(jù)綁定。通過設置GridView控件的DataSourceId屬性,將數(shù)據(jù)源控件關聯(lián)到該GridView控件。如果使用編程式數(shù)據(jù)綁定方式,需要設
8、置GridView控件的DataSource屬性,并調用DataBind方法。AutoGenerateColumns屬性為true(默認為true),GridView控件可以根據(jù)數(shù)據(jù)源的內容自動生成綁定字段,如果字段類型為布爾類型,它將在頁面上為其呈現(xiàn)一個復選框,其它類型的字段內容將直接呈現(xiàn)在頁面上?!纠?0-2】使用編程式數(shù)據(jù)綁定方式,利用GridView控件展示“管理會員頁面”(adminUsers.aspx)中的用戶列表。GridView控件的字段類型控件的字段類型BoundField將數(shù)據(jù)項展現(xiàn)為文本。CheckBoxField將數(shù)據(jù)項展現(xiàn)為復選框。CommonField使用超級鏈接形
9、式支持編輯、刪除或選中行。ButtonField將數(shù)據(jù)項項顯示為按鈕(可以為image按鈕、link按鈕或push按鈕)。HyperLinkField將數(shù)據(jù)項顯示為超級鏈接。ImageField將數(shù)據(jù)項顯示為圖片。TemplateField用于自定義數(shù)據(jù)項的展示?!纠?0-3】使用自定義字段定制GridView控件,顯示學生信息。10.3.2 選擇數(shù)據(jù)選擇數(shù)據(jù)GridView控件允許用戶選擇其中的一行數(shù)據(jù),通常使用該功能創(chuàng)建一個主從結構表。為了標識一行數(shù)據(jù),在數(shù)據(jù)源中有主鍵的概念,為了實現(xiàn)選擇數(shù)據(jù)功能以及在GridView控件中編輯、刪除或修改數(shù)據(jù),需要設置GridView控件的DataKey
10、Names屬性。DataKeyNames屬性在GridView控件中為每行關聯(lián)一個值,可以直接指定一個數(shù)據(jù)列的名稱或者使用逗號隔開的列名列表作為屬性值。通常情況下,將數(shù)據(jù)源的主鍵列名賦值給DataKeyNames屬性?!纠?0-4】在【例10-3】的基礎上添加一個選擇列,當點擊某一行上的【選擇】鏈接時,在該列表的右邊顯示學生的詳細信息。10.3.3 數(shù)據(jù)分頁數(shù)據(jù)分頁如果要顯示的數(shù)據(jù)量比較大,把這些數(shù)據(jù)分在在不同的頁面顯示是比較有效的方法。將GridView控件的AllowPaging屬性設置為真就可以啟用分頁功能。此外,還需要設置PageSize屬性,指定每頁顯示記錄的條數(shù)。PageIndex
11、屬性表示當前選中頁的索引(從零開始)。PagerSettings屬性用來設置分頁界面的外觀。PagerSettings類幾個屬性FirstPageImageUrl第一頁按鈕顯示的圖像URL。FirstPageText第一頁按鈕顯示的文字。LastPageImageUrl最后一頁按鈕顯示的圖像URL。LastPageText最后一頁按鈕顯示的文字。Mode分頁顯示模式,值可以為NextPrevious、NextPreviousFirstLast、Numeric、NumericFirstLast。NextPageImageUrl下一頁按鈕顯示的圖像URLNextPageText下一頁按鈕顯示的文字
12、。PageButtonCount頁按鈕的數(shù)量。Position分頁界面的顯示位置,可以是Bottom、Top和TopAndBottom。PreviousePageImageUrl上一頁按鈕顯示的圖像URL。PreviousePageText上一頁按鈕顯示的文字。Visible是否顯示分頁界面。PagerSettings類FirstPageImageUrl、FirstPageText、LastPageImageUrl、LastPageText、NextPageImageUrl、NextPageText、PreviousePageImageUrl、PreviousePageText屬性只有分頁顯示
13、模式Mode設置為NextPreviousFirstLast才有效。如果設置了xxxImageUrl屬性,分頁按鈕將會忽略與之對應的xxxText屬性并顯示該圖片,否則顯示xxxText屬性的值。當Mode屬性設置為NextPrevious時,僅顯示NextPageImageUrl、NextPageText、PreviousePageImageUrl、PreviousePageText屬性值。當Mode屬性設置為Numeric、NumericFirstLast時,頁面上將顯示頁碼相關信息,頁按鈕的數(shù)量有PageButtonCount屬性值決定?!纠?0-5】在【例10-4】的基礎上為gvStu
14、dent控件增加自定義分頁功能。10.3.4 編輯數(shù)據(jù)編輯數(shù)據(jù)GridView控件除了顯示數(shù)據(jù)外,還支持編輯數(shù)據(jù)。GridView在編輯模式下,每一行都顯示一個“編輯”按鈕,當用戶點擊該按鈕時,當前行的每個單元格中的數(shù)據(jù)都會顯示在一個可編輯控件(如TextBox控件、CheckBox控件或者用戶自己定義的其他DropDownList控件等)內。此時“編輯”按鈕變?yōu)椤案隆焙汀叭∠卑粹o。用戶可以修改單元格中的內容,修改完畢后,點擊“更新”按鈕,保存修改內容,或點擊“取消”按鈕,放棄修改的內容。10.3.4 編輯數(shù)據(jù)編輯數(shù)據(jù)當GridView控件綁定到一個數(shù)據(jù)源控件時,如SqlDataSourc
15、e控件,只需要將AutoGenerateEditButton屬性設置為True即可啟用編輯功能,將AutoGenerateDeleteButton屬性設置為True可以啟用刪除功能,不需要用戶編寫代碼,但需要配置好數(shù)據(jù)源控件。此外,GridView控件還支持通過編程的方式添加編輯和刪除功能。此時需要手動添加編輯和刪除列,并且需要編寫代碼響應RowDeleting、RowUpdating、RowEditing等事件?!纠?0-6】在【例10-5】的基礎上,通過編程方式為gvStudent控件增加編輯和刪除功能。10.4 Repeater控件控件Repeater控件是一個容器控件,用于創(chuàng)建自定義列
16、表。Repeater控件不具備內置的呈現(xiàn)功能,因此,必須通過創(chuàng)建模板為Repeater控件提供布局、格式設置和樣式標記。當包含Repeater控件的頁面運行時,Repeater控件依次為數(shù)據(jù)源中的每個記錄呈現(xiàn)一個項。模 板說 明ItemTemplate此模板為必選模板。包含要為數(shù)據(jù)源中每個數(shù)據(jù)項都要呈現(xiàn)一次的HTML元素和控件。AlternatingItemTemplate使用此模板為交替項創(chuàng)建不同的外觀,例如指定一種與ItemTemplate不同顏色的背景色。SeparatorTemplate包含在每項之間呈現(xiàn)的元素。例如可能是一條直線(使用元素)。HeaderTemplate列表的開始處呈
17、現(xiàn)的文本和控件。僅呈現(xiàn)一次。FooterTemplate列表的結束處呈現(xiàn)的文本和控件。僅呈現(xiàn)一次。Repeater應用舉例【例10-7】利用Repeater控件實現(xiàn)首頁音樂排行列表。實現(xiàn)效果如圖10-23所示。數(shù)據(jù)綁定表達式在ASP.NET中,大部分數(shù)據(jù)綁定控件都支持模板。如Repeater、DataList、FormView,都必須使用模板,否則無法顯示數(shù)據(jù)。GridView、DetailsView和Menu控件也支持模板,但不是必需的。數(shù)據(jù)綁定表達式是一種特殊的表達式,它直到運行時才計算出結果。在頁面代碼中使用數(shù)據(jù)綁定表達式的方法是將表達式包含在符號之間。 等價于在數(shù)據(jù)綁定表達中,除了可以
18、調用Eval方法外還可以調用其他方法或變量。 10.5 DataList控件控件DataList控件與Repeater控件一樣都是由模板驅動的。但是和Repeater控件不同,DataList控件默認輸出一個HTML表格,因此在使用DataList控件的時候可以做更多的格式化設置。DataList的RepeatLayout屬性默認為Table,即輸出為一個表格。還可以修改為Flow,表示在HTML標簽中中輸出數(shù)據(jù)。DataList控件可以把內容顯示為多列表格,每個數(shù)據(jù)項占用一個單元格。以下兩個屬性控制DataList控件輸出布局:RepeatColumns顯示的列數(shù);RepeatDirecti
19、on輸出網(wǎng)格的方向,Horizontal表示橫向,Vertical表示縱向。DataList模板DataList控件除了和Repeater控件一樣,支持ItemTemplate、AlternatingItemTemplate、SeperatorTemplate、HeaderTemplate和FooterTemplate模板外,還支持另外兩個模板:EditItemTemplate當進入編輯狀態(tài)時顯示;SelectedItemTemplate當列被選中時顯示。【例10-8】應用DataList控件顯示首頁中最新注冊用戶列表。10.6 DetailsView控件控件DetailsView控件用于一次
20、處理一條數(shù)據(jù)記錄??梢杂脕盹@示、編輯、插入和刪除數(shù)據(jù)項。DetailsView控件將一條記錄中的每一列都呈現(xiàn)為一個獨立的HTML表格行。和GridView等數(shù)據(jù)綁定控件一樣,DetailsView控件也支持聲明式數(shù)據(jù)綁定和編程式數(shù)據(jù)綁定,并且DetailsView控件中使用的字段類似于GridView控件的Column,DetailsView控件的字段包括BoundField、CheckBoxField、CommandField、ButtonField、HyperLinkField、ImageField和TemplateField。當DetailsView控件的AutoGenerateRows
21、屬性設置為false時,DetailsView控件不會自動為記錄中的每一列創(chuàng)建一行來呈現(xiàn)數(shù)據(jù),否則將自動創(chuàng)建一行。當使用字段自定義DetailsView控件外觀時,需要將AutoGenerateRows設置為False。DetailsView控件應用舉例控件應用舉例【例10-9】在10.2.2選擇數(shù)據(jù)一節(jié)中,為GridView控件添加了選擇功能。當用戶點擊某一行的【學生詳情】鏈接按鈕時,希望在右邊顯示其詳細信息。但是,在【例10-4】中僅僅使用了一個Label控件顯示了用戶的簡單信息?,F(xiàn)在使用DetailsView控件顯示用戶的詳細注冊信息。FormView控件控件和DetailsView控件
22、一樣,F(xiàn)ormView控件也用于一次處理一條數(shù)據(jù)記錄,并且可以顯示、編輯、插入和刪除數(shù)據(jù)項。不同之處在于,DetailsView控件將一條記錄中的每一列都呈現(xiàn)為一個獨立的HTML表格行,而FormView控件則完全由模板驅動。相比較而言,使用FormView控件需要更多的編碼,正因如此,F(xiàn)ormView控件可以有更多的設置,完成更靈活的頁面布局。FormView控件通常結合數(shù)據(jù)源控件完成記錄的更新和插入操作,F(xiàn)ormView控件的DefaultMode屬性用于設置該控件的默認模式,在執(zhí)行取消、插入和更新命令后恢復為該模式。和DetailsView控件一樣,F(xiàn)ormView控件還通常用于主/從方
23、案中。FormView模板模 板說 明ItemTemplate項模板。定義只讀模式下的數(shù)據(jù)行顯示界面。EditItemTemplate編輯模板,定義編輯模式下的數(shù)據(jù)行顯示界面。InsertItemTemplate插入模板,與編輯模板相似,控制用戶在后端數(shù)據(jù)源中添加一條新記錄時的字段顯示。EmptyDataTemplate空數(shù)據(jù)模板。當數(shù)據(jù)源中沒有數(shù)據(jù)時,顯示此模板中的內容。HeaderTemplate標題模板。FooterTemplate表尾模板。PagerTemplate分頁模板。用于控制分頁。FormView控件應用舉例應用舉例FormView和DetailsView控件都可以自動對其關聯(lián)
24、數(shù)據(jù)源中的數(shù)據(jù)以一次一個記錄的方式進行翻頁。如果將FormView控件的AllowPaging屬性設置為【True】,則FormView控件可自動添加用于分頁的用戶界面 (UI) 控件。也可以通過添加PagerTemplate模板來自定義用于分頁的用戶界面。在FormView控件中,一個數(shù)據(jù)頁就是一條綁定記錄。【例10-10】利用FormView控件,結合SqlDataSource數(shù)據(jù)源控件完成專業(yè)的添加、刪除和修改功能。當使用 DataSourceID 屬性綁定到數(shù)據(jù)源時,F(xiàn)ormView 控件支持雙向數(shù)據(jù)綁定。除可以使該控件顯示數(shù)據(jù)之外,還可以使它自動支持對綁定數(shù)據(jù)的插入、更新和刪除操作,
25、前提是用戶必須配置好數(shù)據(jù)源控件以支持編輯功能。10.8 ListView控件控件ListView控件是ASP.NET 3.5中新引入的控件,可以綁定從數(shù)據(jù)源返回的數(shù)據(jù)項并顯示它們。這些數(shù)據(jù)可以顯示在多個頁面或者在一個頁面逐個顯示數(shù)據(jù)項,也可以對它們分組。ListView控件會按照頂一頂模板和樣式顯示數(shù)據(jù)。與DataList和Repeater控件相似,此控件也適用于任何具有重復結構的數(shù)據(jù)。但與這些控件不同的是,ListView控件允許用戶編輯、插入和刪除數(shù)據(jù),以及對數(shù)據(jù)進行排序和分頁,并且所有這一切都無需編寫代碼??梢哉f,ListView就是DataGrid和Repeater的結合體,它既有Re
26、peater控件的開放式模板,又具有DataGrid控件的編輯特性。ListView控件并不直接支持分頁,需要借助下一節(jié)講述的DataPager控件完成分頁功能。ListView模板LayoutTemplate :布局模板。定義ListView控件的布局,必須包含一個充當數(shù)據(jù)占位符的控件。例如,該布局模板可以包含ASP.NET Table、Panel或Label控件(它還可以包含runat屬性設置為“server”的table、div或span元素)。這些控件將包含ItemTemplate模板所定義的每個項的輸出,還可以在GroupTemplate模板定義的內容中對這些輸出進行分組。ItemT
27、emplate :項模板。標識要為各個項顯示的數(shù)據(jù)綁定內容。此模板包含的控件通常已綁定到數(shù)據(jù)列或其他單個數(shù)據(jù)元素上。ItemSeparatorTemplate :標識要在各個項之間呈現(xiàn)的內容。AlternatingItemTemplate :交替項模板。標識為便于區(qū)分連續(xù)項,而為交替項呈現(xiàn)的內容。SelectedItemTemplate :為區(qū)分所選數(shù)據(jù)項與顯示的其他項,而標識該所選項呈現(xiàn)的內容。ListView模板EmptyItemTemplate :標識在使用GroupTemplate模板為空項時呈現(xiàn)的內容。EmptyDataTemplate:標識在數(shù)據(jù)源沒有返回數(shù)據(jù)時要呈現(xiàn)的內容。Gro
28、upTemplate :分組模板。標識組布局的內容。它包含一個占位符對象,例如表單元格 (td)、div或span。該對象將由其他模板(例如 ItemTemplate 和 EmptyItemTemplate 模板)中定義的內容替換。GroupSeparatorTemplate:標識項組之間呈現(xiàn)的內容。EditItemTemplate :標識要在編輯項時呈現(xiàn)的內容。對于正在編輯的數(shù)據(jù)項,將呈現(xiàn)EditItemTemplate模板的內容以替代ItemTemplate模板的內容。InsertItemTemplate:標識要在插入項時呈現(xiàn)的內容。將在ListView控件顯示的項的開始或末尾處呈現(xiàn)Ins
29、ertItemTemplate模板,以替代ItemTemplate模板。通過使用ListView控件的InsertItemPosition屬性,可以指定InsertItemTemplate模板的呈現(xiàn)位置。ListView控件應用舉例【例10-11】使用ListView控件完成班級信息的管理功能(adminClasses.aspx)。10.9 DataPager控件控件DataPager控件也是ASP.NET 3.5中新引入的控件,用于為實現(xiàn)了IPageableItemContainer接口的數(shù)據(jù)綁定控件顯示導航控件。ListView控件就是實現(xiàn)該接口的一個控件??梢酝ㄟ^使用DataPager控件的PagedControlID屬性將DataPager控件與數(shù)據(jù)綁定控件關聯(lián)起來。也可以選擇將DataPager控件置于數(shù)據(jù)綁定控件層次結構的內部。例如,在ListView控件中,可以將DataPager控件置于ListView.:.LayoutTemplate模板內部??梢酝ㄟ^更改PageSize屬性自定義為每個數(shù)據(jù)頁顯示的項數(shù)。也可以通過設置QueryStringField屬性更改將頁面提交給服務器的方式。DataPa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術創(chuàng)新在農村環(huán)保事業(yè)中的推動作用研究
- 2024美容院美容師勞動合同范本含員工職業(yè)健康檢查及保護3篇
- 2025年度消防排煙系統(tǒng)設計與施工一體化服務合同6篇
- 2025年度玻璃鋼化糞池設計與制造一體化服務合同3篇
- 2024年高速鐵路建設土石方工程承包合同范文3篇
- 小學綜合實踐課程的多元化教學方法探討
- 上海地區(qū)2024二手房產(chǎn)交易協(xié)議模板一
- 2024電子商務平臺技術開發(fā)與維護合同
- 2024年度園林景觀設計與施工合同
- 小學語文教學中的口才藝術
- 內分泌專業(yè)臨床路徑大全
- IATF16949體系推行計劃(任務清晰版)
- 做一個遵紀守法的好學生主題班會-課件
- 加油站反恐專項經(jīng)費保障制度
- 汽車車輛消防安全防火知識培訓教學課件
- 2023版關于構建安全風險分級管控和隱患排查治理雙重預防機制實施方案全
- 高考詞匯3500+500【默寫版】【打印版】
- 反循環(huán)鉆孔灌注樁施工方案方案
- 數(shù)學課怎樣分層教學案例
- 學校餐廳供貨者評價和退出機制
- 2023醫(yī)院招聘護士考試真題庫及參考答案
評論
0/150
提交評論