ASP.NET 3.5中的ListView控件和DataPager控件

asp.net中让Repeater和GridView支持DataPager分页 改造办法是自己写一个控件,让它继承GridView或Repeater,并实现IPageableItemContainer 接口。下面要发的是国外某高手写的代码,测试有效。具体使用的时候,要建一个类库项目,把代码编译成dll后,就可以添加到VS的工具箱里了! 一、自定义Repeater 代码如下: using System.Web.UI; using System.Web.UI.WebControls; namespace WYJ.Web.Controls { /// /// Repeater with support for DataPager /// </summary 立即下载

原文地址:http://www.west-wind.com/WebLog/posts/127340.aspx
[译者改后源码下载]

[翻译]ASP.NET 3.5中的ListView控件和DataPager控件



原文发布日期:2007.08.02
作者:Rick Strahl
翻译:webabcd


介绍
今天,我花了几个小时的时间研究了一下ASP.NET 3.5中的ListView控件和DataPager控件。 这两个控件是ASP.NET中新增的、非常受欢迎的控件。 ListView控件集成了DataGrid、DataList、Repeater和GridView控件的所有功能。 它可以像Repeater控件那样,让我们在控件内写任何HTML代码。

可以说,ListView就是DataGrid和Repeater的结合体,它既有Repeater控件的开放式模板,又具有DataGrid控件的编辑特性。 这绝对是一个可以引起你兴趣的好东东,因为它给你提供了比DataGird丰富得多的布局手段,同时又具有DataGrid的所有特性。 ListView控件本身并不提供分页功能,但是我们可以通过另一个控件 – DataPager来实现分页的特性。 把分页的特性单独放到另一个控件里,会给我们带来很多好处,比如说可以让别的控件使用它,又比如说我们可以把它放在页面的任何地方。 实质上,DataPager就是一个扩展ListView分页功能的控件。


ListView控件
ListView是用来显示数据的,它的使用类似于Repeater控件。 ListView控件中有n多模板,出示如下:
    ·LayoutTemplate 
    ·ItemTemplate 
    ·AlternatingItemTemplate 
    ·SelectedItemTemplate 
    ·EmptyItemTemplate 
    ·EmptyDataTemplate 
    ·ItemSeparatorTemplate 
    ·GroupTemplate 
    ·GroupSeparatorTemplate 
    ·EditItemTemplate 
    ·InsertItemTemplate

它有很多的模板。 其中有许多新增的模板,如GroupTemplate和InsertItemTemplate。 现在我们可能还无法了解GroupTemplate是如何工作的(后面会有介绍),但是对于InsertItemTemplate来说,一看就知道它是用于添加记录的(在之前的DataGird中是没有这个模板的)。

继续摸索这个控件后,我发现它可以让你在它的模板内写任何HTML标记或控件,这将给我们带来很大的自由度。


用ListView显示数据
开始,你可以把ListView当作是Repeater来使用,也就是说它是模板驱动型的控件,其中的LayoutTemplate是ListView的一个布局模板。 参考如下示例:

< asp:ListView  ID ="lvItems"  runat ="server"  
              DataSourceID
="Data"  
              ItemContainerID
="layoutTemplate"  
              DataKeyNames
="Pk"
 
>
    
< Layouttemplate >                 
        
< div  id ="layoutTemplate"  runat ="server"   />                         
    
</ Layouttemplate >         
        
    
< ItemTemplate >
        
< div  class ="itemdisplay" >
        
< b > <% # Eval("Sku")  %> </ b >< br  />
        
<% # Eval("Abstract")  %> </ div >
    
</ ItemTemplate >
</ asp:ListView >


LayoutTemplate用来决定包裹着详细内容的容器的标记。 你可以在布局模板内放置任何控件,不过它必须要是服务端控件(runat=”server”)。 另外,你还需要指定ListView控件的ItemContainerID属性,它用来告知ListView在哪个容器下显示详细内容。 在上面的例子中,LayoutTemplate其实并没有起到什么作用,因为它只是将ListView显示的详细内容放到了一个<div />标记下而已。 但是,我们也可以用它来显示复杂的布局,如<table />。 请看下面的例子,它就是用<table />来做ListView显示的详细内容的容器的,并且它还有一个固定表头的功能。

< asp:ListView  ID ="lvItemsTable"  runat ="server"  
              DataSourceID
="Data"  
              ItemContainerID
="layoutTableTemplate"  
              DataKeyNames
="Pk"               
>
    
< LayoutTemplate >
        
< div  class ="blackborder"   style ="overflow-y:auto;height:500px;width:800px;" >
        
< table  cellpadding ="5"   >
        
< thead  style ="position:relative;" >
        
< tr  class ="gridheader"  style ="height:30px;" >
            
< th  style ="position:relative" > Sku </ th >< th  style ="position:relative" > Abstract </ th >
        
</ tr >
        
</ thead >
        
< tbody  id ="layoutTableTemplate"  runat ="server"  
               style
="height:470px;overflow:scroll;overflow-x:hidden;" ></ tbody >
        
</ table >
        
</ div >
    
</ LayoutTemplate >

    
< ItemTemplate >
       
< tr  style ="height:0px;" >
           
< td  valign ="top" > <% # Eval("Sku")  %>   </ td >
           
< td  valign ="top" > <% # Eval("Abstract")   %> </ td >
       
</ tr >
    
</ ItemTemplate >

</ asp:ListView >    


请注意一下上面的布局模板,特别是其中的<TBODY />部分。 ItemTemplate会将其内生成的详细内容插入到<TBODY />之中。


增加分页功能
如果你想为ListView增加分页功能的话,那么就需要使用DataPager控件了。 这个分页控件是一个独立的控件,你可以把它放到页面的任何位置,然后使其联到你的ListView控件就可以完成分页的工作了。 该分页控件所呈现出来的HTML标记为内联(Inline)元素,所以如果你想精确地设置其位置的话,可以参考下面的代码,为其包裹一个<div />标记。

你可以像下面这样设置分页控件,并可以把其放到页面的任何位置。

< div  class ="blockheader"  style ="padding:10px;text-align: right;" >
    
< asp:DataPager  ID ="Pager"  runat ="server"   
                   PagedControlID
="lvItems"  PageSize ="5"   >                        
        
< Fields >
            
< asp:numericpagerfield  ButtonCount ="10"  NextPageText =""  
                PreviousPageText
=""   />
            
< asp:nextpreviouspagerfield  FirstPageText ="First"  LastPageText ="Last"  
                NextPageText
="Next"  PreviousPageText ="Previous"   />
        
</ Fields >
    
</ asp:DataPager >
</ div >


通过上面的代码你会发现,我们可以通过设置DataPager控件的Fields,从而达到手动设置分页布局的目的。 另外还有一个关键点,就是DataPager控件的PagedControlID属性,你需要把它设置为ListView的ID。

当然你也可以把DataPager控件放到布局模板内。

把分页功能作为一个单独的控件分离出来是一个非常好的注意 – 它会让我们有更多的布局和 显示上的自由度。 但是,目前的分页控件还是有其局限性的。 它只能结合ListView控件一起工作 – 如果能用在Repeater或GridView上就更好了。 另外,它也是要依赖于ViewState的。

还有,现在的DataPager控件没有分页事件,也没有SelectedPageIndex属性。

还有一点需要注意的是,ListView没有内置排序功能。


在ListView中添加和编辑数据
ListView通过EditItemTemplate和InsertItemTemplate来提供编辑数据和添加数据的功能。 这个功能的使用非常类似于GridView的编辑特性的使用,只不过它用的都是自定义模板。

< asp:ListView  ID ="lvItems"  runat ="server"  
              DataSourceID
="Data"  
              ItemContainerID
="layoutTemplate"  
              DataKeyNames
="Pk"
              InsertItemPosition
="None"                
>

    
< Layouttemplate >                 
        
< div  id ="layoutTemplate"  runat ="server"   />                         
    
</ Layouttemplate >         
        
    
< ItemTemplate >
        
< div  class ="itemdisplay" >
        
< b > <% # Eval("Sku")  %> </ b >< br  />
        
<% # Eval("Abstract")  %> </ div >
        
        
< asp:Button  ID ="Button1"  runat ="server"  CommandName ="Edit"  Text ="Edit"   />
        
< asp:Button  ID ="Button2"  runat ="server"  CommandName ="Delete"  Text ="Delete"   />
    
</ ItemTemplate >
    
< AlternatingItemTemplate  >
        
< div  class ="itemdisplayalternate" >
        
< b > <% # Eval("Sku")  %> </ b >< br  />
        
<% # Eval("Abstract")  %> </ div >
        
< asp:Button  ID ="Button1"  runat ="server"  CommandName ="Edit"  Text ="Edit"   />
        
< asp:Button  ID ="Button2"  runat ="server"  CommandName ="Delete"  Text ="Delete"   />
    
</ AlternatingItemTemplate >
    
< EditItemTemplate >
        
< div  class ="gridalternate" >
        Sku: 
< asp:TextBox  runat ="server"  ID ="txtSku"  Text ='<%#  Bind("Sku") % > '> </ asp:TextBox >
        
< br  />
        Abstract: 
< asp:TextBox   runat ="server"  id ="txtAbstract"  Text ='<%#  Bind("Abstract") % > '> </ asp:TextBox >
        
< br  />
        
< asp:Button  ID ="Button3"  runat ="server"  CommandName ="Update"  Text ="Update"   />
        
< asp:Button  ID ="Button4"  runat ="server"
                    CommandName
="Cancel"  Text ="Cancel"   />< br  />
         
</ div >
    
</ EditItemTemplate >
    
< InsertItemTemplate >
        
< div  style ="background:Yellow" >
        
< asp:TextBox  runat ="server"  ID ="txtSku"  Text ='<%#  Bind("Sku") % > '> </ asp:TextBox >
        
< br  />
        
< asp:TextBox   runat ="server"  id ="txtAbstract"  Text ='<%#  Bind("Abstract") % > '> </ asp:TextBox >
        
< br  />
        
</ div >
        
< asp:Button  ID ="Button3"  runat ="server"  CommandName ="Inser"  Text ="Insert"   />
        
< asp:Button  ID ="Button4"  runat ="server"
                    CommandName
="Cancel"  Text ="Cancel"   />< br  />
    
</ InsertItemTemplate >             
</ asp:ListView >


在本例中我使用的是SqlDataSource(我比较懒),SqlDataSource中的Insert和Update语句是你必须要提供的。 InsertItemTemplate是ListView中新增的非常受欢迎的模板,我们可以把它的UI设置成与编辑模板相一致。 我们还可以通过InsertItemPosition属性来指定插入模板的位置,它可以是FirstItem、LastItem或None。 一般来说,应该把它设置为None,然后通过某个按钮来设置插入模板的显示位置(FirstItem或LastItem)。示例代码如下:

protected   void  btnAddItem_Click( object  sender, EventArgs e)
{
    
this.lvItems.InsertItemPosition = InsertItemPosition.FirstItem;
}


protected   void  lvItems_ItemCommand( object  sender, ListViewCommandEventArgs e)
{
    
if (e.CommandName == "Update")
    
{
        TextBox tb 
= e.Item.FindControl("txtSku") as TextBox;
        
this.lvItems.InsertItemPosition = InsertItemPosition.None;
        Response.Write(tb.Text);
    }

    
if (e.CommandName == "Cancel")
    
{
        
this.lvItems.InsertItemPosition = InsertItemPosition.None;
    }
   
    
}


你可以在OnItemCommand中写上自己的逻辑,使得一旦执行了Update或Cancel命令就设置InsertItemPosition为None。


分组
大概介绍一下,最后生成的HTML代码会先用GroupTemplate分组,然后再以LayoutTemplate做容器包裹起来。

     < Layouttemplate >                 
        
< div  id ="groupContainer"  runat ="server"   >                                 
        
</ div >
    
</ Layouttemplate >  
    
< GroupTemplate >         
        
< div  class ="blockheader"  style ="height:23px;padding:7px" > Group Header: </ div >
        
< div  id ="layoutTemplate"  runat ="server"   />                         
    
</ GroupTemplate >  


你可以设置ListView的GroupItemCount属性,来指定每组显示多少条记录。


总结
ListView是ASP.NET中新增的一个非常酷的控件。 在本文中我已经介绍过了,相对于GridView来说它有着更为丰富的布局手段,你可以在它的模板内写任何HTML标记或者控件。 如果你使用过Repeater和GridView的话,那么你将会轻松的上手ListView,不过很明显地,你也将要手写更多的HTML标记。 但是,它也将会给我们带来更多的布局上的自由度,同时也具有编辑、插入等特性。 这就是ASP.NET 3.5给我们带来的非常棒的控件。

ASP.NET中BulletedList列表控件使用及详解 BulletedList 控件创建一个无序或有序(编号)的项列表,它们分别呈现为 HTML UL 或 OL 标记。可以指定项、项目符号或编号的外观,可以静态定义列表项或通过将控件绑定到数据来定义列表项,也可以在用户单击项时作出响应。 对于ASP.NET 1.x里要动态显示Bulledted List时,要么自己利用HTML的<ol>或<ul>元素构造,要么就是“杀鸡用牛刀”的动用Repeater来显示。前者过于死板,后者过于Overkill,也许微软听到这种声音,于是ASP.NET 2.0总算搞了个BulletedList出来了。这控件虽然给人不太多注意,但却看得出微软确实是在乎“用户需求”的 立即下载

相关推荐

高通camx ThreadManager

m_pCore->AcceptNewJob是将一个Job或者任务插入一个Queue,有一个工作线程循环从Queue中取Job任务执行,执行任务就是回调任务中的callback函数,AcceptNewJob实现。调用AddToPriorityQueue将任务添加到queue任务队列,那么什么时候从这个queue中取任务执行呢?有个线程循环执行DoWork,最终调用checkAndDequeue取任务执行。

GetnextWindow的专栏 435

[翻译]ASP.NET 3.5中的ListView控件和DataPager控件

原文地址:http://www.west-wind.com/WebLog/posts/127340.aspx[译者改后源码下载][翻译]ASP.NET 3.5中的ListView控件和DataPager控件原文发布日期:2007.08.02作者:Rick Strahl翻译:webabcd介绍今天,我花了几个小时的时间研究了一下ASP.NET 3.5中的ListView控件和DataPage

webabcd的专栏 816

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

Asp.Net ListView 控件的使用

Asp.Net ListView 数据绑定控件是在Asp.Net 3.5中引入的,在此之前我们已经拥有了n多同类的控件了。那么我们还有必要再增加这类控件吗?答案是Yes!它为你提供了强大的可高度自定义外观功能,使用它你几乎可以扔掉其他的数据绑定控件了。 ListView 包含大量的模板,使用这些模板我们可以很方便地显示、编辑、插入数据,也可以对数进行分组,设置选中一行数据或如数据为空时...

weixin_34259232的博客 336

基于Pixhawk与OpenMV的无人机视觉引导精准降落系统设计与实现

本文详细介绍了基于Pixhawk飞控与OpenMV视觉模块的无人机精准降落系统设计与实现。系统通过OpenMV识别Apriltag标签,结合MAVLink通信将视觉数据发送给Pixhawk,实现厘米级精准降落。文章涵盖硬件连接、软件配置、核心代码逻辑解析及实战调试技巧,为无人机自动充电、物流配送等场景提供可靠解决方案。

weixin_29189377的博客 320

OpenMontage:AI代理驱动的端到端视频生产系统实战指南

在当今内容创作领域,自动化视频生成技术正成为提升生产效率的关键。其核心原理在于通过智能体(Agent)架构,将复杂的视频制作流程拆解为可被AI理解和执行的标准化任务,从而实现从创意到成片的端到端自动化。这项技术的核心价值在于大幅降低了专业视频制作的门槛,使非专业用户也能快速产出具有一定专业度的内容。其典型应用场景包括社交媒体短片、产品演示、知识科普视频的批量生产。OpenMontage正是这一技术理念的杰出实践,它构建了一个完整的代理驱动视频生产系统,将AI编码助手转变为能自主规划并执行脚本撰写、素材检索、

weixin_35757191的博客 646

Asp.Net ListView+DataPager 的使用

ListView控件用于显示数据,它提供了编辑、删除、插入、分页与排序等功能,它的分页功能是通过DataPager控件来实现的。DataPager控件的PagedControlID属性指定ListView控件ID,它可以摆放在两个位置,一是内嵌在ListView控件的标签内,二是独立于ListView控件。    1.前台页面代码: DataKeyNames: 数据库表的主键名      

SheeranX的博客 2491

超临界二氧化碳再热再压缩布雷顿循环建模与先进控制

超临界二氧化碳布雷顿循环建模与先进控制研究 本文研究了超临界二氧化碳再热再压缩布雷顿循环系统的建模与控制。通过MATLAB/Simscape构建了包含压缩机、透平、回热器等关键组件的动态模型,并设计了基于模型预测控制(MPC)和自抗扰控制(ADRC)的多层控制策略。系统采用转速控制的压缩机、阀门开度控制的透平,以及可变热源加热器,实现了全动态分析。研究结果表明,MPC与ADRC混合控制方案相较于传统PID控制,功率超调降低至0.9%,效率波动控制在±0.08%,扰动恢复时间缩短至12秒。

AI的内部世界的博客 340

ASP.NET中ListView用DataPager分页

  最近在维护一个以前的项目,项目中用到ListView,在ListView的分页中用的是DataPager。最开始我将数据绑定放到了Page_Load事件中,数据的加载等都很正常,显示也没有问题,就是在点击分页按钮的时候分页总是不正确,这个问题困扰了我几天,期间我也想换用AspNetPager分页控件,在一次偶然的机会我搜索到ListView结合DataPager分页,其中关键的一句:   注...

weixin_30716725的博客 268

【HALCON工业视觉应用探索】02. C# + Halcon铸件毛刺机器人打磨引导:点云处理从实验室到工业现场的全流程落地

摘要:铸件毛刺的自动化打磨是机械制造领域的重要难题,其随机性(高度0.1-3mm)和复杂工况导致人工打磨效率低(3分钟/件)、工伤率高。本文基于Halcon 24.11与.NET 6,构建了一套点云处理方案:通过线激光扫描仪获取三维点云,经预处理、毛刺检测、路径规划三大模块,引导机器人完成打磨。虚拟实验测试显示,对高度>1mm的毛刺检出率达100%,定位误差±0.08mm,但工业现场受油污、粉尘影响,性能降至检出率68-75%、处理时间>45秒。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1127

Oracle11g下载与安装(windows)

一、Oracle11g下载 二、安装准备 三、执行安装步骤 四、测试连接 附:Oracle11g服务说明

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 2万+

ASP.NET 3.5中的ListView控件和DataPager控件(一)

<br />介绍<br />今天,我花了几个小时的时间研究了一下ASP.NET 3.5中的ListView控件和DataPager控件。 这两个控件是ASP.NET中新增的、非常受欢迎的控件。 ListView控件集成了DataGrid、DataList、Repeater和GridView控件的所有功能。它可以像Repeater控件那样,让我们在控件内写任何HTML代码。<br /><br />可以说,ListView就是DataGrid和 Repeater的结合体,它既有Repeater控件的开放式模板,

GoodShot的专栏 1601

MuJoCo 入门教程(八)Model仓库

一个物理仿真器的好坏取决于它所仿真的模型,而在像 MuJoCo 这样功能强大、建模选项众多的仿真器中,很容易创建出行为与预期不符的 "坏 "模型。MuJoCo Menagerie 的目标是为社区提供一个设计精良、开箱即用的模型集。更多信息,请访问 Menagerie 资源库。

机器人控制与仿真应用 1939

(转)ASP.NET 3.5中的ListView控件和DataPager控件

导读:   原文地址:http://www.west-wind.com/WebLog/posts/127340.aspx   [译者改后源码下载]   [翻译]ASP.NET 3.5中的ListView控件和DataPager控件   原文发布日期:2007.08.02   作者:Rick Strahl   翻译:webabcd   介绍   今天,我花了几个小时的时间研究了一下ASP.NET 3

MADfox1983的专栏 929

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【转贴】ASP.NET 3.5中的ListView控件和DataPager控件

  作者:Rick Strahl  翻译:webabcd 原文地址:http://www.west-wind.com/WebLog/posts/127340.aspx 译文地址:http://www.cnblogs.com/webabcd/archive/2007/08/13/853081.html [源码下载] 介绍 今天,我花了几个小时的时间研究了一下ASP.N...

weixin_34242331的博客 126

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ASP.NET 3.5's ListView and DataPager—Part1 用ListView控件展示数据

 本文英文原版及代码下载:http://aspnet.4guysfromrolla.com/articles/122607-1.aspxASP.NET 3.5s ListView and DataPager—Part1  用ListView控件展示数据导言:在2007年11月微软发布了ASP.NET 3.5,正如文章《An Overview of ASP.NET 3.5 and Vi

heker2007的专栏 3687

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 新瓶旧酒ASP.NET AJAX系列文章索引
下一篇: 学习Silverlight
sqlmlm
博客等级 码龄19年 12粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值