介绍
今天,我花了几个小时的时间研究了一下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没有内置排序功能。

ASP.NET 3.5中的ListView控件和DataPager控件(一)相关推荐

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

    作者:Rick Strahl  翻译:webabcd 原文地址:http://www.west-wind.com/WebLog/posts/127340.aspx 译文地址:http://www.cn ...

  2. 在.net3.5中使用ListView控件和DataPager控件笔记

    演练:使用 ListView Web 服务器控件修改数据 演练:使用 ListView Web 服务器控件对数据进行显示.分页和排序 DataPager 控件 注意DataPager控件只能和List ...

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

    在ListView中添加和编辑数据 ListView通过EditItemTemplate和InsertItemTemplate来提供编辑数据和添加数据的功能.这个功能的使用非常类似于GridView的 ...

  4. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  5. ASP.NET 2.0中使用自定义provider (2)

    ASP.NET 2.0中使用自定义provider (2) 在tech ed 2005上,有对asp.net 2.0的介绍,其中讲到asp.net 2.0提供了很多功能,让程序员做少很多东西,这引起了 ...

  6. 【转】 ASP.NET 3.5中使用新的ListView控件

    ASP.NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局,使之成为一项极好的方式,建立以数据为中心的Web应用程序. 当你编写以用户为中心的应用程序时,总需要某种形式的数 ...

  7. 在ASP.NET 3.5中使用新的ListView控件(3)

    在清单1中,SqlDataSource通过设置ConnectionString 和SelectCommand 属性控制从AdventureWorks数据库的Product表中检索数据,Connecti ...

  8. 在ASP.NET 3.5中使用新的ListView控件(6)

    值 描述 Cancel 取消当前操作 Delete 从数据源删除当前选中的项目 Edit 切换ListView到编辑模式,显示EditItemTemplate组件中指定的内容 Insert 作为一条新 ...

  9. [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField...

    导言 比起BoundField.CheckBoxField.HyperLinkField以及其他的那些数据字段控件(data field controls)来说,TemplateField提供了一种高 ...

最新文章

  1. 查看chrome驱动以及下载对应谷歌浏览器版本
  2. android获取状态栏截屏按钮状态,关于代码截屏带状态栏的问题
  3. Informix IDS 11体系打点(918考试)认证指南,第 5 局部: 数据库管事器操作(4)
  4. 推荐一个golang的json库
  5. Bootstrap组件_媒体对象,列表组
  6. java简易日历程序报告_简单的日历小程序(java编写)
  7. java矩形翻转_如何判断一个点在旋转后的矩形中
  8. nohup命令导致nohup.out文件过大处理办法
  9. C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示
  10. java——题型和考点大纲
  11. activitymq 登录界面地址
  12. cl.nd77.pw index.php,Loop in template
  13. prayaya v3-国产神操作系统
  14. 使用 Python 合并地图瓦片
  15. yyyy/MM/dd转换成yyyy-MM-dd,yyyy-MM-dd转换成yyyy/MM/dd你会了吗
  16. 基于立体视觉的三维模型重建系统设计
  17. UR机器人PolyScope使用入门教程
  18. 服务器有必要更新主板芯片组吗,芯片组驱动要不要更新_芯片组驱动卸载了会怎么样...
  19. 学习记录-钓鱼网站总结
  20. 谈一下我是如何从使用json-lib到投入fastjson的怀抱....

热门文章

  1. Linux如何生成列表
  2. mysql增量备份及恢复解决方案
  3. nginx+web.py+fastcgi(spawn-fcgi)的session失效問題
  4. 一个大龄程序员对大家的总结性忠告(源于VeryCD)
  5. 磁盘阵列——RAID0制作方法
  6. VueRouter源码分析
  7. 使用“时间机器”备份您的 Mac
  8. 使用Docker Compose管理多个容器
  9. java 泛型应用,通用返回类,泛型方法,泛型静态方法
  10. Visual Studio 2017版本15.9现在可用