ASPNET中新的ListView控件為顯示和CURD數據庫操作提供了基於模板的布局使之成為一項極好的方式建立以數據為中心的Web應用程序
當你編寫以用戶為中心的應用程序時總需要某種形式的數據集起碼來說你需要從一個數據源如關系數據庫或XML文件檢索數據在顯示給用戶之前先要進行格式化盡管ASPNET之前的版本就提供了以數據為中心的顯示控件如GridView這些控件缺乏專業Web開發人員需要的可自定義和可擴展特性為了解決這個問題ASPNET提供了一個新的控件ListView它提供了非常優秀的自定義和擴展特性使用這些特性你可以以任何格式顯示數據使用模板和樣式同時用最少的代碼執行CURD(創建讀取更新刪除)操作
本文主要集中於使用新的ListView控件時數據訪問步驟同時還包括高級特性如編輯數據和處理事件
ListView控件入門
ASPNET提供的大部分數據綁定控件都是使用額外的標記自動封裝顯示數據舉例來說GridView控件在一個HTML表格( )中顯示它的數據每條記錄顯示一行( )每個字段顯示為一個單元格( )雖然你可以使用TemplateField組件自定義GridView的外觀但GridView的輸出仍然是限制在一個table組件中的但有時候你想要完全控制由數據綁定控件產生的HTML標記的外觀這正是ListView控件的優勢ListView控件不是使用額外的標記來封裝它的輸出內容而是靠你指定的精確的HTML描述使用ListView控件內置的模板就可以指定精確的標記表列出了ListView控件支持的模板
模板
用途
AlternatingItemTemplate
交替項目模板
用不同的標記顯示交替的項目便於查看者區別連續不斷的項目
EditItemTemplate
編輯項目模板
控制編輯時的項目顯示
EmptyDataTemplate
空數據模板
控制ListView數據源返回空數據時的顯示
EmptyItemTemplate
空項目模板
控制空項目的顯示
GroupSeparatorTemplate
組分隔模板
控制項目組內容的顯示
GroupTemplate
組模板
為內容指定一個容器對象如一個表行div或span組件
InsertItemTemplate
插入項目模板
用戶插入項目時為其指定內容
ItemSeparatorTemplate
項目分隔模板
控制項目之間內容的顯示
ItemTemplate
項目模板
控制項目內容的顯示
LayoutTemplate
布局模板
指定定義容器對象的根組件如一個tablediv或span組件它們包裝ItemTemplate或GroupTemplate定義的內容
SelectedItemTemplate
已選擇項目模板
指定當前選中的項目內容的顯示最關鍵的兩個模板是LayoutTemplate和ItemTemplate正如名字暗示的那樣LayoutTemplate為ListView控件指定了總的標記而ItemTemplate指定的標記用於顯示每個綁定的記錄例如下面的代碼顯示了在ListView中由HTML table控制的一串項目
在前面的代碼中LayoutTemplate標記內的 標記的ID是設置項目占位符(itemPlaceHolder)它告訴ListView通過內的ItemTemplate產生的內容要放到什麼地方這就是為什麼你需要單獨定義LayoutTemplate和ItemTemplate模板的原因
一個簡單的數據綁定的例子你已經看到LisView控件支持的多個模板了下一步是要創建一個簡單的web站點名字就叫做ListViewExample(你可以從_tt_mainsourcezip下載該站點的示例代碼)創建好web站點後選擇Web站點?添加新項目添加一個新的ASPNET頁面名字命名為SimpleListViewaspx(見清單)這個頁面將使用ListView控件從AdventureWorks示例數據庫中的Product表顯示產品數據
清單ListView控件示例清單> DataSourceID=productSource DataKeyNames=ProductID> > PreviousPageText=<—— NextPageText=——> /> Product ID Text= /> Name Text= /> Product Number runat=server Text= />
There are no products!
DataSourceMode=DataSet ConnectionString= SelectCommand=SELECT ProductIDNameProductNumberColorListPrice FROM ProductionProduct>在清單中SqlDataSource通過設置ConnectionString 和SelectCommand 屬性控制從AdventureWorks數據庫的Product表中檢索數據ConnectionString屬性通過一個ASPNET表達式從nfig文件獲取連接字符串在我的測試機上連接字符串定義在nfig中如connectionString=server=localhostuid=sapwd=thirudatabase=AdventureWorks/>設置好SqlDataSource屬性後下一步是通過ListView控件顯示數據下面是在LayoutTemplate模板中的標記> PreviousPageText=<—— NextPageText=——> />
LayoutTemplate模板定義了ListView控件輸出內容的容器除了在ListView控件頂層定義了table外LayoutTemplate模板還定義了它為ListView控件提供了分頁功能DataPager讓你可以為任何數據綁定控件實現IpageableItemContainer進行數據分頁並顯示導航控制
有兩種方法使數據分頁(DataPager)和數據綁定(databound)聯合使用
設置DataPager 的PagedControlID屬性為databound的名字
將DataPager置於databound層次體系之下對於ListView控件你可以將DataPager置於LayoutTemplate組件內
設置DataPager的PageSize屬性它控制每頁顯示的數據行數你也可以在頁面提交到服務器時通過設置QueryStringField屬性實現
在DataPager內你指定NumericPageField模板它可以讓用戶輸入一個頁號然後按照頁號進行跳轉如
PreviousPageText=<
NextPageText=> />
ItemTemplate組件為每個記錄的明細提供了標記圖顯示了在浏覽器中導航到該頁面的輸出
圖ListView示例通過數據綁定ListView控件到SqlDataSource控件檢索Product表中部分數據產生的輸出
用ListView控件編輯數據
正如你所看到的使用ListView控件顯示數據相對要直接得多但你還可以讓用戶在ListView中直接編輯數據添加一個新頁面ListViewEditExampleaspx它的代碼如清單所示
清單編輯ListView
>
DataKeyNames=DepartmentID runat=server
OnItemUpdated=deptsView_ItemUpdated
OnPagePropertiesChanged=deptsView_PagePropertiesChanged>
runat=server id=tblProducts>
Name
Group Name
Action
PageSize=>
ShowLastPageButton=True FirstPageText=|<<
LastPageText= >>| NextPageText= >
PreviousPageText= < />
Text= />
Text= />
CommandName=Edit />
Text=
MaxLength= />
CommandName=Update Text=Update />
CommandName=Cancel Text=Cancel />
ConnectionString=
SelectCommand=SELECT [DepartmentID][Name][GroupName] FROM
HumanResourcesDepartment UpdateCommand=UPDATE
HumanResourcesDepartment SET Name = @Name
GroupName = @GroupName WHERE DepartmentID = @DepartmentID>
FontBold=true />
清單的代碼說明了如何使用EditItemTemplate組件在編輯模式下生成內容
然後通過SqlDataSource更新數據庫
首先你設置SqlDataSource的UpdateCommand屬性這樣SQL語句就會用由用戶指定的最新值執行數據庫更新操作
ConnectionString=
SelectCommand=SELECT [DepartmentID][Name][GroupName] FROM
HumanResourcesDepartment UpdateCommand=UPDATE
HumanResourcesDepartment SET Name = @Name
GroupName = @GroupName WHERE DepartmentID = @DepartmentID>
接下來在ItemTemplate組件中指定編輯項目的連接用戶
CommandName=Edit />
然後指定EditItemTemplate聲明用戶輸入更新的部門名稱或組名的文本框以及提交或取消當前操作的用戶連接
Text=
MaxLength= />
CommandName=Update Text=Update />
CommandName=Cancel Text=Cancel />
這裡通過CommandName屬性定義的LinkButton的行為如表所示
表 LinkButton CommandName屬性值列出了ListView控件支持的CommandName屬性值
值
描述
Cancel
取消當前操作
Delete
從數據源刪除當前選中的項目
Edit
切換ListView到編輯模式顯示EditItemTemplate組件中指定的內容
Insert
作為一條新記錄將數據保存到數據源
Update
用指定的值更新數據源
在更新結束後ListView控件激活一個OnItemUpdated事件你可以用它向用戶提供執行的狀態在清單的代碼中ListView控件處理兩個事件
OnItemUpdated正如名字所暗示的那樣這個事件允許你在更新操作完畢後執行一個自定義的程序在前面的代碼中這個事件被用於通知用戶影響的記錄條數
OnPagePropertiesChanged當頁面屬性發生改變時ListView控件激活這個事件前面代碼中使用這個事件清除了在lable標記包括的文本
如果你導航到該頁面你會看到如圖所示的頁面
圖在運轉中編輯ListView配置ListView控件為每條記錄顯示一個編輯連接點擊編輯連接切換到編輯模式
當你點擊了編輯(Edit)超鏈接後ListView控件使用EditItemTemplate顯示文本框用戶就可以編輯文本框中的內容了如圖所示
圖編輯模式在編輯模式下EditItemTemplate組件產生文本框用戶可以在這裡輸入要更新的值
注意在編輯模式下右邊的更新(Update)和取消(Cancel)鏈接當你點更新鏈接就會將所做的改變保存到數據庫中代碼使用了OnItemUpdated事件顯示更新操作所影響的行數如圖所示
圖影響的記錄更新結束時顯示更新操作影響的數據行數
以上就是ListView的全部關鍵特性了同時你也看到了一個使用ListView控件的簡單以數據驅動的示例web頁面以及更復雜的更新功能最後描述了如何使用ListView控件產生的事件正如你看到的ListView控件擴展了運行時自定義的特性更加適合你的需要
From:http://tw.wingwit.com/Article/program/net/201311/13212.html