DataList和Repeater数据排序(一)讲义_第1页
DataList和Repeater数据排序(一)讲义_第2页
DataList和Repeater数据排序(一)讲义_第3页
DataList和Repeater数据排序(一)讲义_第4页
DataList和Repeater数据排序(一)讲义_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在ASP.NET 2.0中操作数据之四十二:DataList和Repeater数据排序(一)作者:heker2007字体:增加 减小类型:转载 时间:2016-05-14我要评论本文主要介绍利用ObjectDataSource 的Selecting事件进行 DataList和Repeater数据排序的方法,DropDownList隐式的为我们将 sort expression 和direction保存在它的view state里,进行分页时从 view state中取出条件进行排序。导言DataList和Repeater数据分页里我们学习了如何在DataList里添加分页功能。我们在Produ

2、ctsBLL 类里创建了一个名为GetProductsAsPagedDataSource的方法,它返回一个PagedDataSource 对象。当绑定到 DataList或Repeater时,他们将只显示请求页的数据。 这个技术和 GridView , DetailsView , FormView的内置分页功能原理差不多。除了分页外,GridView还提供了内置的排序功能,而 DataList和Repeater都没有。然而排序功能可以通过一点点代码就实现。本章我们将学习如何在DataList和Repeater里实现排序功能,我们还将创建一个同时支持分页和排序的DataList或Repeater

3、。回顾一下排序如我们在分页和排序报表数据里看到的,GridView提供了排序的支持。每个 GridView的字段可以有一个关联的SortExpression ,它指明了对数据进行排序依据的字段。当 GridView的AllowSorting属性设为true时,每个包含 SortExpression 属性的GridView的字段 的header都表现为一个 LinkButton 。当点一个header时,页面postback ,数据会根据被 点字段的SortExpression进行排序。另外,SortDirection属性指明了数据是升序或降序。当将GridView 绑定到数据源控件时,它会将

4、SortExpression和SortDirection 传给数 据源控件。数据源控件获取数据并根据SortExpression和SortDirection进行排序。然后将数据返回给GridView。在DataList或Repeater里实现这个功能,我们需要:创建一个排序界面将排序的字段和方向(升序或降序)记下指导ObjectDataSource根据特定字段排序我们将在第三和四步来处理上面三个步骤。然后我们将看看如何让DataList或Repeater同时支持这两个功能(分页和排序)。第二步:在Repeater 里显示 Products在实现排序功能前,首先创建一个列出所有product的R

5、epeater。打开PagingSortingDataListRepeater 文件夹里的 Sorting.aspx 页。添加一个 Repeater,将 ID 设为 SortablePro ducts。从智能标签里创建一个名为ProductsDataSource 的 ObjectDataSource 。用 ProductsBLL类的GetProducts()方法配置它。在 INSERT, UPDATE, DELETE标签的下拉列表里选 择”(None):Configure Da Source - ProductsDefdultPaingDatiSource回叵团区Define Data Met

6、hodsSELECT UPOATE INSERT 见曰a mitKcd of the h-rfli%frJ5 cbjfoct ta a日期日*e 5dhi the DELETE operatic. The m6匕融 shbild accept paranieteT for each primary 庇y for the data otjeit or a rqIe parameter whoch E the data otpct to (letebe.Exwips: DeMgProductCProductMj 卡 Cefet呀oduutflnCZ fodvctK*)wose a method;h

7、Modb)yNoneDeteUPp。g tflciBS prod 咐 JDL 做 untf Boo&rijsiri&di cbj&tfe tKat rdturnj 总岫贴 &cm恒网惜 hht SELECT eper珈w. Tht method can return a DataSetf 品teRe可曲. or stranflly-typedcDllectiori.ExjmpJe: Gelft口dLrHlnL32 categoryIdX jetLMnsjDataSet.noose o methiod;(5e tProdiKtsAsaged&ataScLmcefrrtS pa5elndex, I

8、ntS?七GetProd uctBy?!aductnXlrt 32 productlD), re Uns PraftxbS国T就teGetPfK uctf。jeMf m PrNu a 式i*mT abieetpdud方网声号的1M。工3!/(IrJt32 cateorylD returns ProdtictsOaftaTaWeGetProduct6v5uppliirrDtInt32 eupph&flD),. returns ProductsDatalablfrGProdgfP为自式1m32 sUrtRqwind*1trt32rMocimwmRw?X returns PiF&MggtqgbkGe

9、tPFMuctEPagmMc克WdtSMr力EatE%ae5im工【收己丑奴白代只叫小,怠工Int12 旭灯viumR口冏eJ, return竹口d口 Canod图2:在 UPDATE, INSERT, DELETE 标签的下拉列表里选择“(None)在绑定到数据源后,Visual Studio没有自动为 Repeater创建ItemTemplate ,这点和DataList不一样。而且由于 Repeater控件的智能标签里没有象DataList里那样的EditTemplates选项,因此我们需要直接添加声明代码。我们使用和前一章一样的ItemTemplate,它显示 product 的 na

10、me, supplier, category 。现在你的Repeater和ObjectDataSource的声明标记看起来应该和下面差不多:12345678910111213141516171819202122232425asp:Label ID=ProductNameLabel runat=server|Text=Category:asp:Label ID=CategoryNameLabel runat=serverText=Supplier:asp:Label ID=SupplierNameLabel runat=serverText= |2728293031323334353637图3是

11、现在浏览该页的样子。图 3:显示 Product 的 Name, Supplier, Category123456789第三步:指导ObjectDataSource对数据进行排序为了让Repeater里显示的数据排序,我们需要将数据排序的sort expression告诉ObjectDataSource 。在 ObjectDataSource 获取数据前,首先激发的是Selecting event ,它给我们提供了一个指定 sort expression 的机会。Selecting event handler 有一个 ObjectDat aSourceSelectingEventArgs类型的

12、参数,它有一个名为Arguments 的 DataSourceSelectArguments类型的属性.。DataSourceSelectArguments 类被设计用来将数据相关的请求从数 据的消费者传给数据源控件,它有一个SortExpression property 。创建一个Selecting event handler ,用以下代码将排序的信息从ASP.NET页传给ObjectDataSource :protected void ProductsDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs

13、 e)e.Arguments.SortExpression = sortExpression;sortExpression 需要赋值为排序字段的名字(例如“ProductName)。它没有排序方向相关的属性,因此如果需要以降序来排序,将“DESC付力口在sortExpression的值后面(比如 ProductName DESC )。继续试一下硬编码将 sortExpression赋为不同的值,并浏览页面 。如图4,当使用“P roductName DESC”作为sortExpression时,product会根据name的字母顺序反向排序。的回国回国Elfe Ldt /ew f 4wnt L

14、ls 上匕/ Sttrth Faortes 在,四1 r .-:- http UflocafriMt 11957JC cdgsii/3FrMinfc 乩魅 sMaew/Soctiftfl .punrUniilled Micrmofl InternH KplorprWorking with Data Tutorials ,曷需悭思尸SortingHomeBaste reporting51m 匚他 DispySorting Data in a Repeater ControlDedara bveParametersZaanse koekenSetting Pflremettr valuesFdtn

15、nq ReportsFilter bF Drop-DcnLBtMs ttr-Detail s- D4 tailsCategory : CQnfectinsSupplier Zaanse SnoepfatielWimmers gute SemrticIknOdclCategtjfy: G却ns/C电realsSupplier: Wutzer LebensmitteIgroBmrkte AGMsster/Detail Across:Two PaesVrilkoinn Bukl。心口仃已旧-SdecrdRowCeregory: ConfectionsSupplier. Karkki OyCuEtDm

16、lzedF5m 日 ttngFormp ( 3b 3Unde B0bts Organic Dried Pearsn m Hi i er ; le4ljntrart图4: Product 根据Name 的字母顺序反向排序第四步:创建排序界面并记下Sort Expression 和Direction开启GridView的排序支持会将每个可排序的字段的header text转换为一个LinkButton,当被点击时,会进行相对应的排序。这样的排序对 GridView来说是很合理的,因为它 的数据是以列的形式整齐的展示。而对DataList和Repeater来说,需要不同的排序界面。一个常见的数据列表

17、(相对于数据网格)的排序界面是使用一个提供排序字段的下拉列 表。我们本章将完成这样的界面。在 SortableProducts Repeater 上方添加一个 DropDownList ,将 ID 设为 SortBy。在属 性窗口里点Items属性打开ListItem 集合编辑器。添加 ListItems ,让数据根据 ProductNa me, CategoryName, SupplierName 字段排序。同时添加 ListItem 让 product 根据反向的 name的顺序排序。ListItem 的Text属性可以设为任何值(比如 Name),但是Value必须设为数据字 段的名字(

18、比如“ProductName)。添加字符串“DESCU数据字段名字后面,来让结果以降序排序,比如ProductName DESC 。Listitem Collection EditorName properties: 祠4 I IE图5:为每个可排序的字段添加ListitemText 设最后在 DropDownList 的右边添加一个 Button。将 ID 设为 RefreshRepeater , 为Refresh :完成这些后,DropDownList和Button的声明语法看起来应该和下面差不多:12345678910111213asp:DropDownList ID=SortBy ra

19、sp:ListItem Value=ProductName DESC/asp:ListItemCaSu/asp:DropDownListasp:Button runat=server ID=RefreshRep完成 DropDownList 后,我们需要更新 ObjectDataSource 的 Selecting event handler ,来让它使用151617181920212223242526272829303132(object sender, ObjectDataSourceSe/ Have the ObjectDataSource sort the/ sort expressi

20、oe.Arguments.SortExpression = Sort现在第一次浏览页的时候,由于默认的SortBy Listitem 的值为ProductName ,因此product会根据ProductName字段来排序。见图 6。选择一个其它的项-比如“Category 然后点Refresh ,这时会postback ,数据会根据 category name来重新排序,见图 7。图6:第一次 Products 根据 Name 排序图7:现在 Products 根据 Category 来排序注意:点 Refresh button会让数据重新排序是因为 Repeater的view state被禁用了,因此 Repeate r在每次post

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论