Scott Mitchell ASP.NET 2數(shù)據(jù)控件嵌套(3)_.Net教程
推薦:ASP.Net中無(wú)刷新執(zhí)行Session身份驗(yàn)證在寫(xiě)一個(gè)客戶的B/S結(jié)構(gòu)應(yīng)用程序時(shí),突然發(fā)現(xiàn)一個(gè)技巧,不知道是否是MS的一個(gè)BUG,給相關(guān)的有研究的朋友原先考慮寫(xiě)一個(gè)檢查Session的類,Session失效后,必須轉(zhuǎn)向登陸頁(yè)面,可每一個(gè)調(diào)用該類的頁(yè)
下一步我們的任務(wù)是在CategoryList的ItemTemplate里添加一個(gè)Repeater用來(lái)顯示屬于各個(gè)category下的product.有很多方法可以存取內(nèi)層的Repeater數(shù)據(jù),我們將探討兩種現(xiàn)在我們?cè)贑ategoryList Repeater的ItemTemplate里創(chuàng)建product Repeater.每個(gè)product里將包含name和price
我們將下面的標(biāo)記加到CategoryList的ItemTemplate里:
| ASP.NET | |
1 2 3 4 5 6 7 8 9 10 11 12 |
<asp:Repeater runat="server" ID="ProductsByCategoryList" EnableViewState="False"> <HeaderTemplate> <ul> </HeaderTemplate> <ItemTemplate> <li><strong><%# Eval("ProductName") %></strong> (<%# Eval("UnitPrice", "{0:C}") %>)</li> </ItemTemplate> <FooterTemplate> </ul> </FooterTemplate> </asp:Repeater> |
第三步: 將各Category下的Product綁定到 ProductsByCategoryList Repeater
如果現(xiàn)在你瀏覽這個(gè)頁(yè),你會(huì)看到象圖4一樣的頁(yè)面,因?yàn)槲覀冞沒(méi)有在Repeater里綁定任何數(shù)據(jù).有幾種方法可以將合適的product記錄綁定到Repeater里,其中一些會(huì)比較有效.現(xiàn)在主要的任務(wù)是為指定category取到合適的product.
可以通過(guò)在ItemTemplate里語(yǔ)法聲明ObjectDataSource或者直接在后臺(tái)代碼編程來(lái)將數(shù)據(jù)綁定到內(nèi)層的Repeater.
通過(guò)ObjectDataSource和ItemDataBound來(lái)獲取數(shù)據(jù)
這里我們還是用ObjectDataSource來(lái)實(shí)現(xiàn).ProductsBLL類的GetProductsByCategoryID(Category)
方法可以返回特定CategoryID的products信息.因此,我們將在CategoryList Repeater的ItemTemplate里新建一個(gè)ObjectDataSource,并用這個(gè)方法配置它.
不幸的,Repeater不允許通過(guò)設(shè)計(jì)視圖來(lái)修改template,因此我們需要手動(dòng)添加將聲明語(yǔ)法.見(jiàn)下面的代碼:
| ASP.NET | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<h4><%# Eval("CategoryName") %></h4> <p><%# Eval("Description") %></p> <asp:Repeater runat="server" ID="ProductsByCategoryList" EnableViewState="False" DataSourceID="ProductsByCategoryDataSource"> <HeaderTemplate> <ul> </HeaderTemplate> <ItemTemplate> <li><strong><%# Eval("ProductName") %></strong> - sold as <%# Eval("QuantityPerUnit") %> at <%# Eval("UnitPrice", "{0:C}") %></li> </ItemTemplate> <FooterTemplate> </ul> </FooterTemplate> </asp:Repeater> <asp:ObjectDataSource ID="ProductsByCategoryDataSource" runat="server" SelectMethod="GetProductsByCategoryID" TypeName="ProductsBLL"> <SelectParameters> <asp:Parameter Name="CategoryID" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> |
當(dāng)使用ObjectDataSource方法時(shí)我們需要設(shè)置ProductsByCategoryList Repeater的DataSourceID為ObjectDataSource(ProductsByCategoryDataSource).注意ObjectDataSource有一個(gè)<asp:Parameter>來(lái)指定傳給GetProductsByCategoryID(categoryID)的categoryID.但是我們?cè)趺磥?lái)指定這個(gè)值呢?我們可以設(shè)置DefaultValue屬性為<asp:Parameter>,見(jiàn)下面的代碼:
| ASP.NET | |
1
|
<asp:Parameter Name="CategoryID" Type="Int32" DefaultValue='<%# Eval("CategoryID")' /> |
不幸的,數(shù)據(jù)綁定語(yǔ)法只能用在有DataBinding事件的控件里.Parameter類沒(méi)有這樣的事件,因此這樣使用會(huì)出錯(cuò).
我們需要為CategoryList Repeater的ItemDataBound創(chuàng)建一個(gè)事件處理來(lái)設(shè)置這個(gè)值.每個(gè)item綁定到Repeater時(shí)激發(fā)ItemDataBound事件.因此每次外層的Repeater激發(fā)這個(gè)時(shí)間時(shí),我們可以將當(dāng)前的CaegoryID的值傳給ProductsByCategoryDataSource ObjectDataSource的CategoryID參數(shù).
下面的代碼是為CategoryList Repeater的ItemDataBound創(chuàng)建一個(gè)event handler:
| C# | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
protected void CategoryList_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { // Reference the CategoriesRow object being bound to this RepeaterItem Northwind.CategoriesRow category = (Northwind.CategoriesRow)((System.Data.DataRowView)e.Item.DataItem).Row; // Reference the ProductsByCategoryDataSource ObjectDataSource ObjectDataSource ProductsByCategoryDataSource = (ObjectDataSource)e.Item.FindControl("ProductsByCategoryDataSource"); // Set the CategoryID Parameter value ProductsByCategoryDataSource.SelectParameters["CategoryID"].DefaultValue = category.CategoryID.ToString(); } } |
這個(gè)event handler首先保證我們操作的是data item而不是header,footer或separator item.然后,引用剛剛綁定到當(dāng)前RepeaterItem的CategoriesRow實(shí)例.最后,引用在ItemTemplate里的ObjectDataSource并將當(dāng)前RepeaterItem的CategoryID傳給CategoryID參數(shù).
在這個(gè)event handler里,每個(gè)RepeaterItem里的ProductsByCategoryList Repeater都綁定到RepeaterItem的category里的product.見(jiàn)圖5.
分享:.net教程:ASP.NET GridView的分頁(yè)功能要實(shí)現(xiàn)GrdView分頁(yè)的功能。 操作如下: 1、更改GrdView控件的AllowPaging屬性為true。 2、更改GrdView控件的PageSize屬性為 任意數(shù)值(默認(rèn)為10) 3、更改GrdView控件的PageSetting->Mod
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- asp.net回發(fā)或回調(diào)參數(shù)無(wú)效解決方法
- ASP.NET立即上手教程(10)
- 在.net中如何利用數(shù)據(jù)工廠實(shí)現(xiàn)多數(shù)據(jù)庫(kù)的操作
- ASP.NET2.0服務(wù)器控件之創(chuàng)建復(fù)雜屬性
- 解析WPF實(shí)現(xiàn)音頻文件循環(huán)順序播放的解決方法
- 解讀ASP.NET密碼強(qiáng)度驗(yàn)證代碼實(shí)例
- 解析Web開(kāi)發(fā)模式的顛覆者:ASP.NET MVC
- .NET中如何生成靜態(tài)頁(yè)
- 淺析8月編程語(yǔ)言榜:.Net前景如何?
- 關(guān)于asp.net 自定義分頁(yè)控件
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索Scott Mitchell ASP.NET 2數(shù)據(jù)控件嵌套(3)
- 教程說(shuō)明:
.Net教程-Scott Mitchell ASP.NET 2數(shù)據(jù)控件嵌套(3)
。