34-跨页面的主从报表.docx
在的面一余里我们学习r如何在一个页里显示主/从信息.另外-种常常运用的模式就是将主从信息用两个页分别显示,在前面的跨页面的主/从报表我们通过GridVieW显示全部的SUPPIier来运用这个模式GridVieW,Vti一个HyPer1.inkFie1.d,鞋接到另外一个页,井籽SuppIierID通过querystring传过去.其次个页运用GridView列出(选中的supp1.ier供应的product.这样的两页主;从我也可以用Da1.a1.iSI和Repeater来实现.唯一的区分是Data1.iSt和Repeater都不供应HyPer1.inkF1.e1.d.所以我们须要潦加,个Hyper1.ink控件或不在ItemTempIate1也运用HTM1.<a>.Hyper1.inkftfjNavigate1.1.rt属性和va>的href属性可以通过声明或者编程来自定义.本章我们将探讨运川Repeater列出Ca1.egorieS.侍个1.istitem都包含fcategory的name和description,通过name可以干脆链接到其次个页面.在其次页里用Data1.ist显示选中的Categroy供/式的proudct.笫一步:夕U出Categories全部创建主从表的第一步都是显示主记录.因此,我f11忏先在“主'页里显示CategorieS.打开Data1.istRepeaterFiItering文件夹里的Category1.istMastecaspx页,添加一个RePea1.er,然后通过智能标签添加一一个ObjectDataSource.JIJCategriesB1.1.类的GetCategories方法配四它.见图1.图1:运川CategoriesB1.1.类的GetCategories方法配置ObjectDataSource我们先不关切如何添加Iink.将Repeater的temp1.ate配置成显示/个category的name和description.见下面的代码:ASP.NET<asp:RepeaterID=wRepeaterVrunat=server"Datasource1.D-wObjectDataSourceI"Enab1.eVieWState="Fa1.se"<HadrTemp1.ate><u1.><'HeaderTemp1.ate><1.temTmp1.at><1.i><%EvaICCategoryName")%>-<%ftEvaICDescription*)%><1.i><1.temTemp1.ate><FootrTmp1.ate><u1.><FterTmp1.at></asp:Repeater><asp:ObjectDataSourceID-nObjectDataSourceI"runat-,servefO1.dvaIuesParamGterFormatString="origina1.0)*SeectMethod='GetCategories"TypeName='Catef1.oriesB1.1."></asp:ObjectDataSource>西固K©因完成了上面的代码后,在阅读器里阅读页面.如图2所示.JUntit1.edPdeeMicrosoftIn1.errw1.Exp1.orerBtestmrrt*t1«*gO&&。e.切G、<XEJcoWorkingwithDataTutoria1.sHom>Ma¾trDtWIIReport.thDM1.KtandRpMr>MastrDUN.AcrossTwoP2sHomeBaSKReportinQSmp1.eDisp1.ayTwo-PageMaster/Detai1.ReportOedar,tiyeParametersParameterntermgReportsMaster-DeuH-DetaiA1.terbyOrop-Down1.istMesterZDetaiIAss Beverages-SoftChnks,coffees,teas,beets,aodMs Con<ments-Sweetandsavorysauces,rehshes,spr9(K.and Confctor-Dn411s,C11dS,d$woetbr><½ QaryProducts-Cheeses GrainsZCered1.s-Breads,crackers,pstfandc«rea1. MeatPoMry-Preparedmeats Produce-Onodfrutandbcurd Seafood-Seaweedandfish图2:列出全部的CaIegoryJI次步:将CategoryName转换成链到Detai1.sPage的1.ink我们现在来添M一个Iink,当用户点击时,将会链到其次个页(ProduCtSForCaiegOryDetai1.S.aspx),花这个页里显示“从信息.这页里用Data1.ist显示选中的category的ProdUCt.为了推断是哪个Category的集接被点我们须要将CategoryID传到尤次页加卜脆的方法是通过querystring.我们通过名为CategOryID的qeryst11ng字段将这个传绐PrOdUctSFOrCategOryDetai1.S.aspx.例如,布行Beveragescategroy卜的p<oduct.Category1.D为1.用户将访问PrOdUCtSFOrCategOryDetaiIS.aspx?CategoryID=I页.为了创建hyper1.ink我们须要添加HyPer1.ink控件或者在ItemTemp1.ate电添加HTM1.<a>.在每行的hyper1.ink都相同的状况卜.两种方法都足的U对RePeater来说我更情愿运用<a>.见下面的代码:ASPNET<1.i><ahref='ProductsForCategoryDetai1.s.aspx?Category1.D=<%#Eva1.("Category1.D")%>'><%#EvaICCategoryName-)%><a>-<%#Eva1.("Description)%><1.i>留意CategoryID可以干脆通过href由性写入.解通引号和咨略号.ASP.NET<1.i><asp:HyPer1.inkrunat="srver"Text="<%#EvaICCategoryName")%>'NaViga1.eUr1.='<%#"ProductsForCategoryDetai1.s.aspx?Cateqory1.D="&Eva1.("Category1.D")%>'><asp:HyPer1.ink>-<%#EvaICDescription")%><i>留意在绑定语法H!静态UR1.ProductsForCategoryDetai1.s.asp×7Category1.D是如何脆和EVa1.rCaggoMD")的结果串联.运用HyPer1.ink控件的个好处是假如须要的话可以编程访问RepeatertKJ1.temDataBoundeventhand1.er.例如你可以将没仃关联product的categories显示为文本,而不是Iink.料那些没行关联product的categories的Hyper1.ink的NavigateUrI网性设为一个空的?符串,这样categoryname就显示为个text(而不是Iink).更多的通过ItemDataBoundeventhand1.er的编程来格式化Data1.JSt,和Repeater内容的信息请价格式化Data1.ist和Repeater的数据.线如你在跟着段程做的话,运用上面两种方法都可以.当同该这页时加个categoryname都以1.ink的形式工现.可以链接到ProductsForCategoryDetai1.s.aspx页,并将CategoryID的低传过去.见图3.图3:CategoryNames现在捱接见PrOdUetSFOrCaIegoryDetaiIS.aspx页第三步:列出选中的CategOry下的Products完成Category1.is1.Master.asp页后,我们现在来兀成"从"页FrOdUCtSFOreategoryDeta"s.aspx.打开这个页,拖,个Data1.iSt拄件进来,并将ID设河为PrOdUCtSInCategory.然后在智能标选择添加个名为Products1.nCategoryDataSource的ObjectDatasourceJH1.IProductsB1.1.类的GetPrOdUC1.SByCategory1.D(CategOry1.D)方法配沟它.在INSERT.UPDATE,DE1.ETE标签电选样None.图4:运川ProductsB1.1.类的GetProdUCtSByCategoryID(Category1.D)方法配置ObjectDataSource(I1.fGetProdUCtSByCategOryQ(CategOryID)方法接收,个参数,所以向'小会提示我们指定参数米源.设置parametersource为QUeryString、QUeryStringFieId'hCategoryID.1.-111.r?r×Peramtfers:Perameterourc:QuerySWngHeW:C4tgcryiDfajtViut:ConfigureDataSource-ObjectDataSourceIDefineParametersTheVfeafdh5detectedonecrmoreZrd(r4ersr»y<xrSC1.ECTmethod.FBeachPMarTetermtheSQECTmethod,chooseasourcefoetheparameter'sv1.e.hjethods>gnatre:GctProducts<atcyy!(X1.nt32catcoryD),returnsProductsOataTobIe图5:运川QuerystringFie1.d作为ParameterSource象前面教程里看到的咫杼,完成数据源配?UiViSUa1.Studio会自动创建个ItemTemp1.ate列出每个7段的name和Va1.UC.我们只显示name,supp1.ier和PriCe如Data1.ist的RepeatCo1.umns属性改为2.完成这些后你的声明标记看起来应当和下面常不多:ASPNET<asp:Data1.istID="Producis1.nCategory"runat=*server,DataKeyFieW="Product1.D-RePeatCo1.UmnS='2'Datasource1.D=nProducts1.nCategoryDataSource,EnabIeVieWState="Fa1.se、<1.temTemp1.ate><h5><%#Eva1.("ProductName")%h5><P>Supp1.iedby<%#Eva1.('SuppherName")%><br><%#EvaICUnitPrice-.0C