ListView和DataPager初试
一直以来,除非是纯后台数据用gridview,不然用的都是repeater,因为它生成的代码最少,基本上是纯html,可以完全自定义,很适合搞个性化开发,事实上,它就扮演了一个迭代器的角色,今天无聊翻看工具箱的时候发现了一个datapager,引起了兴趣,google之,发现其是与listview一起出现的,好像还挺不错的,第一个测试代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 <asp:ListView ID="lvtest" runat="server" DataKeyNames="id" DataSourceID="ods" ItemPlaceholderID="layoutTemplate" GroupPlaceholderID="laydiv" GroupItemCount="3">
2 <LayoutTemplate>
3 <table>
4 <tr id="laydiv" runat="server"></tr>
5 </table>
6 </LayoutTemplate>
7 <GroupTemplate>
8 <tr runat="server">
9 <td id="layoutTemplate" runat="server" />
10 </tr>
11 </GroupTemplate>
12 <ItemTemplate>
13 <td><%# Eval("id") %>,<%# Eval("username") %>,<%# Eval("password") %>,<%# Eval("email") %><br /></td>
14 </ItemTemplate>
15 </asp:ListView>
16 <asp:DataPager ID="dpager" runat="server" PagedControlID="lvtest" PageSize="8">
17 <Fields>
18 <asp:NumericPagerField NextPageText="..." PreviousPageText="..." />
19 <asp:NextPreviousPagerField FirstPageText="第一页" />
20 </Fields>
21 </asp:DataPager>
原理是,先设一个布局容器,布局容器里面有一个runat="server"的html容器,比如div,ul,span,tr等,这个容器就到listview标签里设为ItemPlaceholder,这样服务器就知道对应ItemPlaceholderID把模板里的内容填到那里面,最简单的用法就是这样,
我上面的稍微复杂了一点,把group加上了,其实就多包了一层,布局容器包一个分组容器,分组容器包模板html容器,然后把listview的ItemPlaceholderID设为分组容器里面的html容器id,GroupPlaceholderID设为分组容器的id,只是别忘了,分组容器因为是在布局容器里的,所以就应该有两个runat="server"的容器,如上例,tr的runat="server"就应该在group里面再写一次,别以为写在layouttemplate就可以了。
发现也就这么回事,假如真要实现多列的话,要么你把它丢到一个table里,然后把模板设为td,不然的话,就只有丢到一个个div或li里,再用css来实现多列(以前我的一贯做法),所以本质上它最大的好处就是自带了一个分页吧
其实aspnetpager已经是一个相当好的控件了,只不过,我一直在寻找一个不需要控件的分页方式,甚至自己还写了分页类(当然只能url分页了,要模拟linkbutton也可以,但暂时觉得没那个必要,实在要做的话,只有触发__dopostback了),所以,既然这个datapager只能和listview一起用,那就把listview当成迭代器吧,毕竟这种情况下,分页既不需要自已写,也不需要用控件,呵呵。。。话说,这么懒的话,一般只能用在企业项目中了,互联网项目可是体验优先,想懒是不可能的:)
不过,既然所有的模板都在"placeholder"里面,那么你显然应该知道了,里面的所有控的ID会没有悬念地加上placeholder的id前缀,写css或页面脚本的时候要注意了,免得找不到控件。。。