四十三:DataList和Repeater数据排序(二)
- 格式:docx
- 大小:420.41 KB
- 文档页数:17
一、Reapter與DataList、GridView的區別Reapter不是可視化編輯,DataList和GridView都是可視化編輯,其中只有GridView自帶有分頁功能,別外Gridview還帶有修改功能。
Reapter是其中功能最少的一個,但也是其中效率最高,靈活性最大的一個,DataList和GridView會自動生成<span><table>等標籤的,而Reapter是唯一一個不生成多於HTML標籤的數據控件。
因此只有Reapter才能做到跨模板寫標籤。
二、Reapter的應用1、2、<table><tr><td><table><tr><td>標題</td></tr><tr><td><table><tr><td><asp:Reapter……/></td></tr></table></td></tr></table></td></tr></table>3.<table><tr><td></td><td><asp:Reapter…/></td></tr></table>三、Reapter的模板AlternatingItemTemplate与 ItemTemplate 元素类似,但在 Repeater 控件中隔行(交替项)呈现一次。
通过设置AlternatingItemTemplate 元素的样式属性,可以为其指定不同的外观。
FooterTemplate在所有数据绑定行呈现之后呈现一次的元素。
一、填空题(1)ASPX网页的代码储存模式有两种,它们是___和___代码分离模式。
答案:代码分离模式,单一模式(2)当一个Web控件上发生的事件需要立即得到响时,应该将他的属性设置为true。
答案:AutoPostBack(3)请将下列数据(nn)在TextBox控件中显示出来。
Double nn=4512.6;TextBox1.Text=答案:nn.ToString()(4)当需要将TextBox控件作为密码输入框时(要求隐藏密码的代码),应该将控件的TextMode属性设置为.答案:Password(5)下面是一个转移到新网页的指令:Response.Redirect(“”)答案:新网页的Ur1(6)在设计阶段必须将各个验证控件的属性指向被验证的控件。
答案:ControlToValidate(7)下面是设置和取出Session对象的代码。
设置Session的代码是:Session[“greeting”]=“hello wang!”;取出该Session对象的语句如下:string Myvar=;答案:Session[“greeting”].ToString()(8)下面是使用Application对象时防止竞争的代码。
Application.;//锁定Application对象Application[“counter”]=(int)Application[“counter”]+1;Application.;//解除对Application对象的锁定答案:lock(),unlock()(9)废除Session的语句是:。
答案:Session.Abandon()(10)打开文件系统网站时将自动打开一个服务器,这是一个轻量级服务器,可以用来对程序进行检查和调试工作。
答案:开发(11)所谓分布式类就是在多个文件中使用相同的____,相同的____,而且每个类的定义前面都加上____修饰符,编译时编译器就会自动的将这些文件编辑成一个完整的类。
第一章测试1.模型(Model)是应用程序中用于处理应用程序数据逻辑的部分。
()A:对B:错答案:A2.HTML是一种用于制作超文本文档的简单标记语言。
()A:对B:错答案:A3.CSS可用于控制HTML和XML内容的数据交换形式。
()A:错B:对答案:A4.JavaScript是为适应静态网页的交互性而诞生的一种新的脚本(Script)语言。
()A:对B:错答案:B5.Ajax是指一种创建交互式网页应用的网页开发技术。
()A:对B:错答案:A第二章测试框架中包含编译器 csc.exe。
()A:错B:对答案:B2.处于同一个命名空间中的类必须有明确的相互关系。
()A:错B:对答案:A3.在C#中不存在全局方法和变量,所有的变量和方法都包含在类的定义中。
()A:对B:错答案:A4.C#标识符的首字符必须为字母、下划线或@。
()A:对答案:A5.声明数组时既指定了数组的名字和数组元素的类型,又开辟了内存空间。
()A:对B:错答案:B第三章测试1.类体由成员变量定义和成员方法定义两部分组成。
()A:错B:对答案:B2.C#修饰符按功能可分为两类:类修饰符和成员修饰符。
()A:错B:对答案:A3.构造方法的主要作用是完成对类的对象的初始化工作。
()A:对B:错答案:A4.析构方法能被重载,但不能被继承。
()A:对B:错答案:B5.用protected修饰的成员变量可以被3种类所引用:该类自身、该类的嵌套类及该类的子类。
()A:对B:错答案:A第四章测试1.HTML元素和属性是不区分大小写的,但通常约定标记符使用大写字母。
()A:错B:对答案:B2.是HTML文件头标记符,用来描述HTML首部的内容,其作用是说明文档的整体信息。
()A:对答案:A3.在HTML文档中,可以用回车、空格、Tab键来调整文档段落的格式。
()A:错B:对答案:A4.锚点标签定义元素仅限于文字。
()A:错B:对答案:A5.称为区隔标记,其作用是将页面分隔为不同的区域。
详解数据绑定操作中Repeater控件的⽤法⼀、绑定控件之Repeater.NET封装了多种数据绑定控件,诸如GridView、DataList等但该篇⽂章将会从Repeater⼊⼿,因为Repeater只提供了基本的数据绑定模板,没有内置其它分页等功能,所以它是最原始的数据绑定控件,只要能够熟练运⽤Repeater控件其它的绑定控件也就很简单了。
1、Repeater简介Repeater 控件是基本模板化数据列表。
它不像GridView控件⼀样能够可视化的设计格式或样式,因此开发时在控件模板中必须显式声明所有格式、格式和样式标记。
另外Repeater控件没有内置选择、排序、编辑、分页等功能,它只提供了基本的数据绑定,但是它为开发⼈员提供了ItemCommand 事件,该事件⽀持在控件中收发命令。
想要绑定数据,模板是必不可少的,Repeater控件同样⽀持数据模板,⽽且还可以在模板中添加想要的标签,它主要⽤法如下图:Note:每个 Repeater 控件必须定义 ItemTemplate。
⼆、控件使⽤技巧上⽂讲解了Repeater基本的使⽤⽅法及它的⼀些基本特性,接下来做⼏个经典的⽰例来运⽤Repeater控件。
1、数据绑定之删除、编辑该⽰例将会使⽤的前台和后台结合来实现显⽰数据,并能够编辑和删除数据。
删除页⾯:编辑页⾯:前台代码:在单击编辑按钮后将会进⼊编辑页⾯,页⾯是由两个Panel控件来控制,通过传递ID号的⽅式判断显⽰的是编辑页⾯还是删除页⾯,另外前台代码通过设置控件的CommandArgument属性来传递后台所需要判断的id号。
<body><form id="form1" runat="server"><div><asp:Repeater ID="userRepeat" runat="server" OnItemCommand="userRepeat_ItemCommand" OnItemDataBound="userRepeat_ItemDataBound"> <HeaderTemplate><table border="1" style="width:1000px;text-align:center;border-collapse:collapse;"><thead style="background-color:red;"><tr><th>ID</th><th>内容</th><th>操作</th></tr></thead></HeaderTemplate><ItemTemplate><asp:Panel ID="plItem" runat="server"><tr><td><asp:Label runat="server" ID="lblID" Text='<%#Eval("id") %>'></asp:Label></td><td><%#Eval("name") %></td><td><asp:LinkButton ID="lbtEdit" CommandName="Edit" CommandArgument='<%#Eval("id") %>' runat="server">编辑</asp:LinkButton><asp:LinkButton ID="lbtDelete" CommandName="Delete" CommandArgument='<%#Eval("id") %>' runat="server">删除</asp:LinkButton></td></tr></asp:Panel><asp:Panel ID="plEdit" runat="server"><tr><td><asp:Label runat="server" ID="Label1" Text='<%#Eval("id") %>'></asp:Label></td><td><asp:TextBox ID="txtName" runat="server" Text='<%#Eval("name") %>'></asp:TextBox></td><td><asp:LinkButton ID="lbtCancel" CommandName="Cancel" CommandArgument='<%#Eval("id") %>' runat="server">取消</asp:LinkButton> <asp:LinkButton ID="lbtUpdate" CommandName="Update" CommandArgument='<%#Eval("id") %>' runat="server">更新</asp:LinkButton> </td></tr></asp:Panel></ItemTemplate><FooterTemplate></table></FooterTemplate></asp:Repeater></div></form></body>后台代码:在后台代码中很重要的两个事件是ItemCommand和ItemDataBound,其中ItemCommand负责接收前台传进来的按钮命令,根据命令的参数来设置后台传递的id,并在ItemDataBound中来验证id判断切换显⽰Panel。
list排序方法在计算机编程中,list是一种非常常见的数据结构,它可以用来存储一系列数据。
在实际的应用中,我们经常需要对list进行排序,以便更方便地进行数据分析和处理。
本文将介绍几种常见的list 排序方法。
1. 冒泡排序冒泡排序是一种简单的排序算法,它的基本思想是通过不断比较相邻的元素,将较大的元素往后移,较小的元素往前移,以此达到排序的目的。
冒泡排序的时间复杂度为O(n^2),因此在大规模数据的排序中效率较低。
下面是冒泡排序的Python代码实现:```def bubble_sort(lst):n = len(lst)for i in range(n):for j in range(n-i-1):if lst[j] > lst[j+1]:lst[j], lst[j+1] = lst[j+1], lst[j]return lst```2. 插入排序插入排序是一种简单的排序算法,它的基本思想是将一个元素插入到已经有序的序列中,以此达到排序的目的。
插入排序的时间复杂度为O(n^2),但是在数据量较小的情况下,它的效率比冒泡排序要高。
下面是插入排序的Python代码实现:```def insert_sort(lst):n = len(lst)for i in range(1, n):key = lst[i]j = i - 1while j >= 0 and lst[j] > key:lst[j+1] = lst[j]j -= 1lst[j+1] = keyreturn lst```3. 快速排序快速排序是一种高效的排序算法,它的基本思想是通过分治的方式将一个大问题分解成若干个小问题,然后分别解决这些小问题。
快速排序的时间复杂度为O(nlogn),在大规模数据的排序中效率较高。
下面是快速排序的Python代码实现:```def quick_sort(lst):if len(lst) <= 1:return lstpivot = lst[len(lst)//2]left = [x for x in lst if x < pivot]middle = [x for x in lst if x == pivot]right = [x for x in lst if x > pivot]return quick_sort(left) + middle + quick_sort(right)```4. 归并排序归并排序是一种稳定的排序算法,它的基本思想是通过将一个大问题分解成若干个小问题,然后分别解决这些小问题,并将结果合并起来。
DataGrid、DataList、Repeater的区别与使用方法WEB开发自从有了基于脚本的WEB编程技术(如ASP)以来,经历了一个漫长的过程。
通过使用微软的技术,传统的ASP中大量的、单调乏味的、重复性的编程工作成为了历史。
例如,象大多数ASP程序员所知的,在ASP中显示数据库内容所需要的过程:建立数据库连接用SQL查询装载ADO数据集显示所需要的任何HTML代码遍历数据集中的记录输出记录字段值及相关的HTML移向下一条记录循环显示所需要的HTML代码又如,为了在表格中显示记录集的内容,我们需要输出一个〈table〉标签,然后开始循环。
在循环中,每输出一条记录,需要先输出一个〈tr〉标签以及若干对〈td〉标签和〈/tr〉标签。
最后,以一个〈/table〉标签结尾。
在传统的ASP中使用的这种方法有一个主要的缺点:HTML代码与ASP源代码不得不纠缠在一起。
对于那些也许并不理解程序设计的页面设计者或图形艺术家来说,想要更改HTML内容无疑是一场灾难。
另外,代码的产生量也是惊人的,因为我们不仅需要从数据库中取得数据,还需要使之可视化。
好在,提供了三个数据控件,使得原本在ASP中繁杂的工作变得简单。
这三个控件属于数据Web控件,分别是DataGrid,DataList和Repeater。
如果你对数据库编程有所了解的话,你至少应该有使用其中一种控件的经验。
大多数情况下,我们从学习使用DataGrid开始,因为它的功能相对完整(数据显示、分页、编辑)并相对简单。
然而,DataGrid并非总是正确的选择。
本文将分别论述每个数据控件不同于其它数据控件的特点,以及由此带来的优缺点。
正因为每种数据控件都有其自身的缺陷,因此在程序设计中并不存在最完美的选择。
你必须权衡三种控件的优缺点并决定哪一种更加适合你的程序。
为了帮助比较,在对每个控件进行论述时,我们会专注于三个特性:可用性(从页面访问者的角度)、开发时间和性能。
深入研究Repeater摘要:本文介绍数据控件中的Repeater控件,Repeater的具有很高的灵活性在所有这三个数据Web 控件中,Repeater Web 控件在呈现的HTML 里提供了最大的灵活性。
DataGrid 或DataList 会在预设的HTML 标记中自动包含开发人员指定的内容。
与它们不同的是,Repeater 在呈现的时候将严格生成指定的HTML 标记。
因此,如果不想用HTML的table 或者一系列span,标记显示数据,而希望以其他方式显示数据,就必须使用Repeater 控件。
就像DataList 一样,使用Repeater 时要用模板指定标记。
Repeater 包含下列五个模板:AlternatingItemTemplateFooterTemplateHeaderTemplateItemTemplateSeparatorTemplateHeaderTemplate 和FooterTemplate 指定出现在绑定到Repeater 的数据之前和之后的HTML 标记。
AlternatingItemTemplate 和ItemTemplate 指定用于呈现Repeater 的DataSource中的每条记录的HTML 标记和数据绑定语法。
例如,假设您要把包含雇员信息的数据集绑定到Repeater,该数据集的其中一个字段是EmployeeName。
如果要在Web 页上以无序列表的形式显示雇员列表,则可以使用如下Repeater 语法:<asp:Repeater runat="server" id="rptEmployees"><HeaderTemplate><ul></HeaderTemplate><ItemTemplate><li><%# DataBinder.Eval(Container.DataItem, "EmployeeName") %></li></ItemTemplate><FooterTemplate></ul></FooterTemplate></asp:Repeater>与DataGrid 和DataList 不同,Repeater 类不是从WebControl类派生的。
作者:heker2007 字体:[增加减小] 类型:转载时间:2016-05-14我要评论上篇已经介绍了DropDownList隐式使用ViewState,本文主要介绍详细介绍直接使用ViewState存储排序的条件,并配合上一页、下一页按钮,实现DataList和Repeater自定义排序的功能。
接着上篇介绍,上篇已经通过DropDownList简单实现了排序的功能,下面让我们看看带有分页的排序该怎么做。
第五步: 为使用默认分页的DataList添加排序的支持打开PagingSortingDataListRepeater文件夹里的SortingWithDefaultPaging.aspx和Pa ging.aspx 页。
在Paging.aspx 页里查看源文件。
将图8里选择的文本复制下来,然后粘贴到SortingWithDefaultPaging.aspx 页里的<asp:Content>标签内。
图8: 复制粘贴代码然后将Paging.aspx页后台代码里的属性和方法也粘贴到SortingWithDefaultPaging.as px页后台代码里。
现在浏览SortingWithDefaultPaging.aspx页,它现在应该有和Paging.a spx页一样的外观和功能。
在ProductsBLL 里添加默认的分页和排序方法前面一章里我们在ProductsBLL类里创建了一个GetProductsAsPagedDataSource(pag eIndex, pageSize)方法,它返回一个PagedDataSource对象。
这个对象通过BLL的GetPro ducts()方法获取所有的product,然而绑定到DataList的只是那些和输入参数pageIndex 和pageSize 相关的记录。
本章前面我们已经通过在ObjectDataSource的Selecting event handler里指定sort expression来添加了排序功能。
当ObjectDataSource返回可排序对象时这个方法运转的很好,比如GetProducts()方法返回的ProductsDataTable。
然而GetProductsAsPagedDataSo urce方法返回的PagedDataSource对象并不支持对它内部数据的排序,因此我们需要在将数据放入PagedDataSource前对GetProducts()方法返回的记录进行排序。
在ProductsBLL类里建一个GetProductsSortedAsPagedDataSource(sortExpression, p ageIndex, pageSize)方法。
指定GetProducts() 方法返回的ProductsDataTable的default DataTableView的排序属性。
?123 4 5 6 7 8 91011121314151617[ponentModel.DataObjectMethodAttribute(ponentModel.DataObjectMethodType.Select, false)]publicPagedDataSource GetProductsSortedAsPagedDataSource(stringsortExpression, intpageIndex, intpageSize){// Get ALL of the productsNorthwind.ProductsDataTable products = GetProducts();// Sort the productsproducts.DefaultView.Sort = sortExpression;// Limit the results through a PagedDataSourcePagedDataSource pagedData = newPagedDataSource();pagedData.DataSource = products.DefaultView;pagedData.AllowPaging = true;pagedData.CurrentPageIndex = pageIndex;pagedData.PageSize = pageSize;returnpagedData;} GetProductsSortedAsPagedDataSource方法和前面一章里的GetProductsAsPagedDataSource方法有一点不一样。
GetProductsSortedAsPagedDataSource多了一个sortExpression参数,将它的值赋给ProductDataTable的DefaultView的Sort属性。
并将ProductDataT able的DefaultView赋给PagedDataSource对象的DataSource。
调用GetProductsSortedAsPagedDataSource 方法并指定输入参数SortExpression的值完成这些后,下一步需要提供参数值。
SortingWithDefaultPaging.aspx页的ObjectDat aSource现在被配置用来调用GetProductsAsPagedDataSource方法并通过两个QueryStrin gParameters来传递参数,这些参数在SelectParameters集合里已经指定了。
这两个Quer yStringParameters参数表示GetProductsAsPagedDataSource方法的pageIndex 和pageS ize 参数从querystring里获取。
修改ObjectDataSource的SelectMethod属性,让它调用GetProductsSortedAsPagedD ataSource方法。
然后添加一个新的QueryStringParameter来让sortExpression 参数通过q uerystring的sortExpression字段获取。
将QueryStringParameter的默认值设为“ProductNa me”。
现在ObjectDataSource的声明标记语言看起来应该和下面差不多:?123 4 5 6 7 8 91011121314<asp:ObjectDataSource ID="ProductsDefaultPagingDataSource"OldValuesParameterFormatString="original_{0}"TypeName="ProductsBLL"SelectMethod="GetProductsSortedAsPagedDataSource"OnSelected="ProductsDefaultPagingDataSource_Selected"runat="server"><SelectParameters><asp:QueryStringParameter DefaultValue="ProductName"Name="sortExpression"QueryStringField="sortExpression"Type="String"/><asp:QueryStringParameter DefaultValue="0"Name="pageIndex"QueryStringField="pageIndex"Type="Int32"/><asp:QueryStringParameter DefaultValue="4"Name="pageSize"QueryStringField="pageSize"Type="Int32"/></SelectParameters></asp:ObjectDataSource>现在SortingWithDefaultPaging.aspx页会按照product name的字母顺序排序。
见图9。
这是因为GetProductsSortedAsPagedDataSource方法的sortExpression 参数的默认值为“P roductName”。
图9: 默认的按照ProductName 排序如果你手动添加一个sortExpression querystring字段–比如SortingWithDefaultPaging. aspx?sortExpression=CategoryName –那么结果会以指定的sortExpression来排序。
然而在转到另外一个页时这个sortExpression参数并没有包含在querystring里。
实际上当点上或者下一页时我们会返回Paging.aspx。
而且当前并没有排序界面。
用户可以改变数据排序的唯一方法是直接操作querystring。
创建排序界面我们首先要修改RedirectUser方法来将用户重定向到SortingWithDefaultPaging.aspx 页(而不是Paging.aspx),并将sortExpression的值包含到querystring里。
我们还应该添加一个只读的SortExpression属性。
这个属性和前面一章里创建的PageIndex 和PageSiz e属性相似,在sortExpression querystring字段存在时返回它的值,否则的话使用默认值“ProductName”。
现在的RedirectUser方法只接收一个参数–显示的页的index。
然而可能有些时候我们需要使用排序表达式将用户重定向到特定数据的页。
我们将马上来为这个页创建排序界面,它将包含一些button来为指定的列排序。
当其中一个button被点击时,我们需要传入合适的排序表达式的值来重定向用户。
为了提供这个功能,创建两个RedirectUser方法。
第一个接收page的index,第二个接收page index和sort expression(排序表达式)。
?图10: Products 按照Category排序图11: 分页时会记下Sort Expression第六步: Repeater的自定义分页第五步里的DataList示例使用默认的分页技术。