婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 在ASP.NET 2.0中操作數據之三十四:基于DataList和Repeater跨頁面的主/從報表

在ASP.NET 2.0中操作數據之三十四:基于DataList和Repeater跨頁面的主/從報表

熱門標簽:400電話辦理哪家性價比高 遂寧市地圖標注app 地圖定位圖標標注 塔城代理外呼系統 濮陽外呼電銷系統怎么樣 地圖標注專業團隊 代理接電話機器人如何取消 天心智能電銷機器人 地圖標注的公司有哪些

導言

  在前面一章里我們學習了如何在一個頁里顯示主/從信息.另外一種經常使用的模式就是將主從信息用兩個頁分別顯示.在前面的跨頁面的主/從報表 我們通過GridView顯示所有的supplier來使用這個模式.GridView里包含一個HyperLinkField,鏈接到另外一個頁,并將SupplierID通過querystring傳過去.第二個頁使用GridView列出了選中的supplier提供的product.

  這樣的兩頁主/從表也可以用DataList和Repeater來實現.唯一的區別是DataList和Repeater都不提供HyperLinkField.所以我們需要添加一個HyperLink控件或者在ItemTemplate里使用HTML a>.HyperLink的NavigateUrl屬性和a>的href屬性可以通過聲明或者編程來自定義.

本章我們將探討使用Repeater列出categories.每個list item都包含了category的name和description.通過name可以直接鏈接到第二個頁面.在第二頁里用DataList顯示選中的categroy提供的proudct.

第一步: 列出Categories

  所有創建主從表的第一步都是顯示主記錄.因此,我們首先在"主"頁里顯示categories.打開DataListRepeaterFiltering文件夾里的CategoryListMaster.aspx頁,添加一個Repeater,然后通過智能標簽添加一個ObjectDataSource.使用CategriesBLL類的GetCategories方法配置它.見圖1.


圖 1:使用CategoriesBLL類的GetCategories方法配置ObjectDataSource

我們先不關心如何添加link.將Repeater的template配置成顯示每個category的name和description.見下面的代碼:

asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1"
 EnableViewState="False">
 HeaderTemplate>
 ul>
 /HeaderTemplate>
 
 ItemTemplate>
 li>%# Eval("CategoryName") %> - %# Eval("Description") %>/li>
 /ItemTemplate>
 
 FooterTemplate>
 /ul>
 /FooterTemplate>
/asp:Repeater>
 
asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
 OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetCategories" TypeName="CategoriesBLL">
/asp:ObjectDataSource>

完成了上面的代碼后,在瀏覽器里瀏覽頁面.如圖2所示.


圖 2: 列出所有的 Category

第二步: 將Category Name 轉換成鏈到Details Page 的Link

  我們現在來添加一個link,當用戶點擊時,將會鏈到第二個頁(ProductsForCategoryDetails.aspx),在這個頁里顯示"從"信息.這頁里用DataList顯示選中的category的product.為了判斷是哪個category的鏈接被點了,我們需要將CategoryID傳到第二頁.最直接的方法是通過querystring.我們通過名為CategoryID的querystring字段將這個傳給ProductsForCategoryDetails.aspx.例如,查看Beverages categroy下的product,CategoryID為1.用戶將訪問ProductsForCategoryDetails.aspx?CategoryID=1頁.

  為了創建hyperlink我們需要添加HyperLink控件或者在ItemTemplate里添加HTMLa>.在每行的hyperlink都相同的情況下,兩種方法都足夠了.對Repeater來說我更愿意使用a>.見下面的代碼:

li>
 a href='ProductsForCategoryDetails.aspx?CategoryID=%# Eval("CategoryID") %>'>
 %# Eval("CategoryName") %>
 /a> - %# Eval("Description") %>
/li>

注意CategoryID可以直接通過href屬性寫入.注意引號和省略號.

li>
 asp:HyperLink runat="server" Text='%# Eval("CategoryName") %>'
 NavigateUrl='%# "ProductsForCategoryDetails.aspx?CategoryID=" 
  Eval("CategoryID") %>'>
 /asp:HyperLink>
 - %# Eval("Description") %>
/li>

注意在綁定語法里靜態URL— ProductsForCategoryDetails.aspx?CategoryID— 是如何直接和Eval("CategoryID")的結果串聯.

  使用HyperLink控件的一個好處是如果需要的話可以編程訪問Repeater的ItemDataBound event handler.例如你可以將沒有關聯product的categories顯示為文本,而不是link.將那些沒有關聯product的categories的HyperLink的NavigateUrl屬性設為一個空的字符串,這樣category name就顯示為一個text(而不是link).更多的通過ItemDataBound event handler的編程來格式化DataList和Repeater內容的信息請看格式化DataList和Repeater的數據.如果你在跟著教程做的話,使用上面兩種方法都可以.當瀏覽這頁時,每個category name都以link的形式呈現,可以鏈接到ProductsForCategoryDetails.aspx頁,并將CategoryID的值傳過去.見圖3.


圖 3: Category Names 現在鏈接到ProductsForCategoryDetails.aspx頁

第三步: 列出選中的Category下的Products

  完成CategoryListMaster.aspx頁后,我們現在來完成"從"頁,ProductsForCategoryDetails.aspx.打開這個頁,拖一個DataList控件進來,并將ID設置為ProductsInCategory.然后在智能標簽里選擇添加一個名為ProductsInCategoryDataSource的ObjectDataSource.并用ProductsBLL類的GetProductsByCategoryID(categoryID)方法配置它.在INSERT,UPDATE,DELETE標簽里選擇None.


圖 4: 使用ProductsBLL類的GetProductsByCategoryID(categoryID)方法配置ObjectDataSource

  由于GetProductsByCategoryID(categoryID)方法接收一個參數,所以向導會提示我們指定參數來源.設置parameter source為QueryString,QueryStringField為CategoryID.


圖 5: 使用Querystring Field 作為Parameter Source

  象前面教程里看到的那樣,完成數據源配置后,Visual Studio會自動創建一個ItemTemplate列出每個字段的name和value.我們只顯示name,supplier和price.將DataList的RepeatColumns屬性設為2.完成這些后你的聲明標記看起來應該和下面差不多:

asp:DataList ID="ProductsInCategory" runat="server" DataKeyField="ProductID"
 RepeatColumns="2" DataSourceID="ProductsInCategoryDataSource"
 EnableViewState="False">
 ItemTemplate>
 h5>%# Eval("ProductName") %>/h5>
 p>
  Supplied by %# Eval("SupplierName") %>br />
  %# Eval("UnitPrice", "{0:C}") %>
 /p>
 /ItemTemplate>
/asp:DataList>
 
asp:ObjectDataSource ID="ProductsInCategoryDataSource"
 OldValuesParameterFormatString="original_{0}" runat="server"
 SelectMethod="GetProductsByCategoryID" TypeName="ProductsBLL">
 SelectParameters>
 asp:QueryStringParameter Name="categoryID" QueryStringField="CategoryID"
  Type="Int32" />
 /SelectParameters>
/asp:ObjectDataSource>

  現在我們來看看效果,先瀏覽CategoryListMater.aspx頁.然后在列出的category上點一個link.這樣就會跳到ProductsForCategoryDetails.aspx頁,并將CategoryID通過querystring傳過去.ProductsInCategoryDataSource ObjectDataSource會返回指定category的product并將它們顯示在DataList中,每行兩個.圖6是點擊Beverages的截圖.


圖 6: 每行兩個的顯示Beverages

第四步: 在ProductsForCategoryDetails.aspx里顯示 Category 信息

  當用戶在CategoryListMaster.aspx頁點擊一個category時,會跳到ProductsForCategoryDetails.aspx頁并顯示選中的categry下的product.然而在這個頁里并沒有包含哪個category被選中了的信息.用戶可能想點Beverages,但是結果點了Condiments,這時他沒辦法知道自己是否點錯了.為了剞劂這個問題,我們可以將選中的category信息顯示在ProductsForCategoryDetails.aspx頁的頂部(name和description).在ProductsForCategoryDetails.aspx的Repeater上添加一個FormView.然后通過智能標簽添加一個名為CategoryDataSource的ObjectDataSource,并用CategoriesBLL類的GetCategoryByCategoryID(categoryID)方法配置它.


圖 7: 配置CategoryDataSource

  在第三步增加ProductsInCategoryDataSource ObjectDataSource時,向導提示我們為GetCategoryByCategoryID(categoryID)方法指定輸入參數.在這里我們使用和前面一樣的配置,將parameter source設為QueryString,QueryStringField設為CategoryID(見圖5).

  完成向導后,Visual Studio會為FormView自動創建ItemTemplate,EditItemTemplate和InsertItemTemplate.由于只提供只讀的界面,我們將EditItemTemplate和InsertItemTemplate.當然你也可以自定義FormView的ItemTemplate.完成上面的操作偶你的標記語言應該和下面差不多:

asp:FormView ID="FormView1" runat="server" DataKeyNames="CategoryID"
 DataSourceID="CategoryDataSource" EnableViewState="False" Width="100%">
 ItemTemplate>
 h3>
  asp:Label ID="CategoryNameLabel" runat="server"
  Text='%# Bind("CategoryName") %>' />
 /h3>
 p>
  asp:Label ID="DescriptionLabel" runat="server"
  Text='%# Bind("Description") %>' />
 /p>
 /ItemTemplate>
/asp:FormView>
 
asp:ObjectDataSource ID="CategoryDataSource" runat="server"
 OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetCategoryByCategoryID" TypeName="CategoriesBLL">
 SelectParameters>
 asp:QueryStringParameter Name="categoryID" Type="Int32"
  QueryStringField="CategoryID" />
 /SelectParameters>
/asp:ObjectDataSource> 

注意:我們還在FormView上加了一個HyperLink,它會將用戶鏈回到category頁(CategoryListMaster.aspx).


圖 8: Category 信息顯示在頁的頂部

第五步: 如果選中的Category下無 Products 則顯示一個提示信息

  無論有沒有相關聯的product,CategoryListMaster.aspx頁都會列出所有的category.如果用戶點了一個無product的category,由于數據源為空,在ProductsForCategoryDetails.aspx頁里的DataList將不會顯示.在前面的教程里我們看到了GridView提供了一個EmptyDataText屬性,可以用來在數據源無記錄時定義一個消息.不幸的是DataList和Repeater都沒有這個屬性.

  為了在category無product時提示用戶,我們需要在頁里加一個Label控件.在沒有匹配的product時將它的Text屬性設置為要顯示的信息.我們需要根據DataList有沒有內容來編程設置它的Visible屬性.首先在DataList下加一個Label控件.將它的ID設為NoProductsMessage,Text設為"There are no products for the selected category…".然后我們根據是否有數據綁定到ProductsInCategory DataList來設置它的Visible屬性.這一步需要在數據綁定到DataList之后做.對GridView,DetailsView和FormView來說,我們可以為DataBound事件創建一個event handler.在數據綁定完后激發.然而DataList和Repeater都沒有DataBound事件.

  在這個例子里我們可以在Page_Load事件處理里設置Label的Visible屬性..由于數據綁定到DataList先于Page的Load事件.然而,這種方法在一般情況下不會起作用,因為從ObjectDataSource來的數據是在頁面周期之后綁定到DataList.如果顯示的數據基于另一個控件的值,例如,象在使用DropDownList顯示主記錄的主/從表的例子里,數據直到Page的生命周期的PreRender后才綁定到控件.

  一個在所有情況下都起作用的解決方案是在DataList的ItemDataBound(或ItemCreated)事件處理中設置Visible為False.在這種情況下我們知道數據源里至少有一個數據項,因此可以隱藏NoProductsMessage Label.除了這個event handler外,我們還需要一個DataList DataBingd的事件處理,來初始化Label的Visible屬性為True.由于DataBinding時間在ItemDataBound事件后激發,Label的Visible屬性會初始化為True.如果有數據,它會被設為False.見下面的代碼:

protected void ProductsInCategory_DataBinding(object sender, EventArgs e)
{
 // Show the Label
 NoProductsMessage.Visible = true;
}
 
protected void ProductsInCategory_ItemDataBound(object sender, DataListItemEventArgs e)
{
 // If we have a data item, hide the Label
 if (e.Item.ItemType == ListItemType.Item ||
 e.Item.ItemType == ListItemType.AlternatingItem)
 NoProductsMessage.Visible = false;
}
      

  在Northwind數據庫里的category都和一個或多個product關聯.為了測試上面的功能,我手動修改了Northwind數據庫,將Produce category(CategoryID=7)的product都和Seafood category(CategoryID=8)關聯起來.這個可以在Server Explorer里選擇New Query并使用下面的語句:

UPDATE Products SET
 CategoryID = 8
WHERE CategoryID = 7

  更新了數據庫后,回到CategoryListMaster.aspx頁,點Produce鏈接.由于Produce category下面已經沒有任何product,所以你會看到"There are no products for the selected category…"的提示,見圖9.


圖 9: 選中的Category下無Product時會顯示一個提示消息

總結

  主/從記錄可以在一個頁上顯示,也可以在兩個頁上分別顯示.在本章里我們學習了如何在"主"頁上用Repeater列出category,將相關的product在"從"頁上列出.每個"主"頁上的項都包含一個鏈到"從"頁的link,并將行的CategoryID值傳過去.

  在"從"頁里通過ProductsBLL類的GetProductsByCategoryID(categoryID)方法返回product.categoryID參數通過querystring的CategoryID值指定.而且我們還將category的細節使用FormView顯示在"從"頁里,當選中的category無關聯product時,會顯示一條提示信息.

  祝編程愉快!

作者簡介

  Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創始人,自1998年以來一直應用 微軟Web技術。Scott是個獨立的技術咨詢顧問,培訓師,作家,最近完成了將由Sams出版社出版的新作,24小時內精通ASP.NET 2.0。他的聯系電郵為mitchell@4guysfromrolla.com,也可以通過他的博客http://ScottOnWriting.NET與他聯系。

您可能感興趣的文章:
  • Repeater中添加按鈕實現點擊按鈕獲取某一行數據的方法
  • 在ASP.NET 2.0中操作數據之二十九:用DataList和Repeater來顯示數據
  • 在ASP.NET 2.0中操作數據之三十:格式化DataList和Repeater的數據
  • 在ASP.NET 2.0中操作數據之三十三:基于DataList和Repeater使用DropDownList過濾的主/從報表
  • 在ASP.NET 2.0中操作數據之三十五:使用Repeater和DataList單頁面實現主/從報表
  • 在ASP.NET 2.0中操作數據之四十一:DataList和Repeater數據分頁
  • 在ASP.NET 2.0中操作數據之四十二:DataList和Repeater數據排序(一)
  • 在ASP.NET 2.0中操作數據之四十三:DataList和Repeater數據排序(二)
  • 在ASP.NET 2.0中操作數據之四十四:DataList和Repeater數據排序(三)
  • 在ASP.NET 2.0中操作數據之四十五:DataList和Repeater里的自定義Button

標簽:宜春 本溪 吉林 河南 麗江 汕頭 重慶 婁底

巨人網絡通訊聲明:本文標題《在ASP.NET 2.0中操作數據之三十四:基于DataList和Repeater跨頁面的主/從報表》,本文關鍵詞  在,ASP.NET,2.0,中,操作,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數據之三十四:基于DataList和Repeater跨頁面的主/從報表》相關的同類信息!
  • 本頁收集關于在ASP.NET 2.0中操作數據之三十四:基于DataList和Repeater跨頁面的主/從報表的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    岛国一区二区三区| 欧美亚男人的天堂| 欧洲一区二区三区在线| 亚瑟在线精品视频| 欧美日韩精品一区二区天天拍小说| 国产精品久久久一区麻豆最新章节| 国产a久久麻豆| 99久精品国产| 亚洲成人免费av| 久久综合丝袜日本网| 国产一区二区三区四区五区美女| 欧美国产一区视频在线观看| 欧美丝袜丝nylons| 国产成人av电影在线播放| 玉米视频成人免费看| 精品国产青草久久久久福利| 欧美丝袜丝交足nylons图片| 成人福利电影精品一区二区在线观看| 午夜欧美电影在线观看| 中文欧美字幕免费| 欧美老年两性高潮| 91免费视频网| 风间由美一区二区三区在线观看 | 美女视频一区二区三区| 国产午夜精品一区二区三区视频 | 亚洲成年人影院| 中文字幕一区不卡| 欧美精品一区二区高清在线观看| 日本精品一区二区三区四区的功能| 国内精品在线播放| 蜜臀久久99精品久久久久宅男| 亚洲男人的天堂在线观看| 精品91自产拍在线观看一区| 日本韩国欧美在线| 成人免费观看男女羞羞视频| 国产麻豆成人传媒免费观看| 欧美电视剧免费观看| 成人av网站在线观看免费| 99精品久久99久久久久| 国产盗摄精品一区二区三区在线| 亚洲午夜av在线| 天天色综合天天| 亚洲电影第三页| 亚洲国产你懂的| 五月开心婷婷久久| 一卡二卡三卡日韩欧美| 一区二区三区中文字幕| 中文字幕免费在线观看视频一区| 久久先锋资源网| 国产欧美va欧美不卡在线| 日韩一区二区精品在线观看| 欧美在线观看视频在线| 91精品久久久久久久99蜜桃| 粉嫩av一区二区三区在线播放| 色婷婷一区二区三区四区| 国产成人免费视频一区| 国产精品18久久久| 美女高潮久久久| 老司机免费视频一区二区| 久久福利资源站| 国产精品一区二区三区99| 久久精品久久综合| 国产麻豆精品一区二区| 国产精品99久久久久久久vr| 成人激情图片网| 91丝袜美女网| 中文字幕一区二区三区不卡| 一区二区三区欧美激情| 亚洲电影视频在线| 日日夜夜免费精品视频| 色女孩综合影院| 在线免费观看日本欧美| 在线精品视频免费播放| 日韩免费观看高清完整版在线观看| 日韩一级大片在线| 精品久久国产字幕高潮| 国产欧美日韩不卡免费| 国产精品免费久久久久| 亚洲影视在线观看| 精品无码三级在线观看视频| 视频在线在亚洲| 国产精品2024| 欧美亚洲国产bt| 欧美精品三级日韩久久| 国产视频在线观看一区二区三区| 亚洲天堂精品视频| 美女视频网站久久| www.欧美亚洲| 亚洲国产一区二区a毛片| 精品视频一区二区不卡| 亚洲精品一区二区三区在线观看| 久久精品人人做人人综合| 中文字幕一区二区三区蜜月| 视频一区视频二区在线观看| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲视频在线一区观看| 全国精品久久少妇| 97se亚洲国产综合在线| 日韩欧美在线1卡| 一区二区三区精品视频在线| www.亚洲色图.com| 亚洲精品一区二区在线观看| 日韩国产精品91| 欧美精品日韩精品| 亚洲自拍偷拍av| 99精品欧美一区二区三区综合在线| 精品国内片67194| 久久久91精品国产一区二区精品 | 中文字幕中文乱码欧美一区二区| 蜜桃av噜噜一区| 欧美人伦禁忌dvd放荡欲情| 国产精品欧美一区喷水| 国产精品 日产精品 欧美精品| 欧美日韩aaaaaa| 国产精品正在播放| 欧美日韩精品欧美日韩精品| 一区二区三区久久久| 99re成人在线| 中文字幕一区二区三区精华液| 国产69精品久久777的优势| 久久久精品免费免费| 激情六月婷婷久久| 欧美大尺度电影在线| 午夜久久久久久久久| 欧美久久高跟鞋激| 亚洲成va人在线观看| 欧美日韩激情一区| 亚洲午夜精品一区二区三区他趣| 91看片淫黄大片一级在线观看| 国产婷婷色一区二区三区四区| 国产一区在线观看麻豆| 久久综合九色综合欧美亚洲| 日韩av一级片| 日韩欧美一级在线播放| 国产精品99久久久久| 亚洲美女少妇撒尿| 欧美一卡二卡在线观看| 久久97超碰国产精品超碰| www国产精品av| 91黄色免费看| 国产一区二区免费视频| 亚洲欧美一区二区三区孕妇| 欧美精品丝袜久久久中文字幕| 精品一区精品二区高清| 亚洲女爱视频在线| 日韩欧美视频一区| 成人免费不卡视频| 午夜久久电影网| 国产欧美一区二区精品性色超碰 | ㊣最新国产の精品bt伙计久久| 91福利小视频| 韩国女主播一区二区三区| 国产午夜精品福利| 在线看不卡av| 国产精品一二三四| 午夜精品视频一区| 久久久亚洲精品一区二区三区| 国产成人欧美日韩在线电影| 亚洲国产另类av| 国产精品白丝在线| 久久五月婷婷丁香社区| 欧美日韩精品一区二区三区| 久久不见久久见免费视频1| 日韩欧美一级二级三级| 成人黄色av网站在线| 亚洲免费在线视频一区 二区| 亚洲高清在线精品| 日韩午夜中文字幕| 欧美v日韩v国产v| 国产精品久久久久久久久图文区 | 色噜噜狠狠成人网p站| 久久久久久久久久久久久女国产乱| 亚洲免费观看在线观看| 欧美日韩国产成人在线91| 成人a区在线观看| 亚洲欧美日韩国产手机在线| 制服.丝袜.亚洲.中文.综合| 天天综合色天天综合色h| 国产精品美女久久久久久 | 亚洲精品视频在线看| 美国一区二区三区在线播放| 欧美国产激情二区三区 | 精品久久国产字幕高潮| 美女视频黄 久久| 欧美日韩不卡在线| 欧美日本国产一区| 欧美一区二区三区在线电影 | 中文字幕五月欧美| www久久久久| 国产精品久久综合| 亚洲人123区| 在线亚洲人成电影网站色www| 久久精品久久久精品美女| 日本女人一区二区三区| 五月天欧美精品| 亚洲一区av在线| 日韩av电影免费观看高清完整版| 麻豆国产精品视频| 精品一区二区影视| 免费亚洲电影在线|