ListView控件的基本操作
ListView是.NetFramework3.5以后VS2008新增加的一个控件,当然我们现在都用VS2010了,当然也就有了,我的VS2010安装的是试用版的,120天以后就过期了,过期以后想着安装正式版的,可是报了一系列的安装错误,先用着VS2008吧。VS2010试用版的过期后让我给卸载了。
一听ListView控件是最新加上去的,那么它肯定是个集大成者,有着以前哪几种控件的种种优点。没错,在repeater、DataList、GridView控件中所拥有的优点,在ListView控件中都包含了。确实是一个集大成的控件。
DataList是外层给我们套了一个Table,repeater没有,那么ListView是集成优点来着,外层有Table好啊还是没有好啊,反正我是不太喜欢外层套上一个Table,然后我必须在每一个TD标记里面在嵌套一个Table标记,多麻烦啊。所以说repeater灵活,ListView就继承过来这个优点了,它的外层代码全是我们手写,不像DataList一样外层默认给我们套一个Table表格,ListView像repeater一样:没有外层的Table表格了。
回顾一下,我们的repeater控件用起来简洁,但是要自己写挺多代码。DataList自己提供了很多的模板给我们,自然方便得多,不过没有repeater那么简洁。GridView也是提供了很多的模板给我们,它比DataList更方便,甚至有些操作不用写一行后他代码就可以实现。
它们三者(repeater、DataList、GridView控件)是互相补充的,不存在谁去替代谁的概念。repeater比DataList和GridView更加灵活简洁,而DataList和GridView提供给我们现成的功能更加全面,使用起来更加方便。它们谁也替代不了谁。
功能上repeater、DataList、GridView能够做到的,ListView也能够做到。我想这也许就是这个控件推出的目的吧。
但是ListView也存在它的弊端,它不存在可视化的界面,也就是说它只能让我们看着HTML代码去写我们要实现的功能,要去创建的模板。不像DataList和GridView那样有很多的模板,很多的可视化编程操作界面。它没有,这点它非常类似于repeater。
---------------------------------------------------------------------
下面就来说说ListView控件的模板:
它的模板主要用到的有,注意是主要用到的:
<LayoutTemplate>
</LayoutTemplate>
<GroupTemplate>
</GroupTemplate>
<ItemTemplate>
</ItemTemplate>
<EditItemTemplate>
</EditItemTemplate>
---------------------------------------------------------------------
下面我用这些模板来实现两个效果:
第一个效果的显示结果:
首先是LayoutTemplate模板中的代码,这可以说使我们最常用到的一个模板:
我标出来的一个重要的属性:itemPlaceholder,它会自动的去找ItemTemplate模板中的内容。那这就好办了,我们的ItemTemplate模板可以做了。注意:我们必须设itemPlaceholder这个属性,不设置或写错了,那就完蛋了,除非说把这个属性的名称给改成自己想要的:在哪里改?在ListView属性中的:
ListVIew的ItemTemPlate的做法和repeater做ItemTemPlate一样:
再就是在这里绑定数据的时候,只能用Eval去绑定(单向绑定),而不能用Bind双向绑定。因为我们在这里用到的是TD标记,而不是一个控件。Bind双向绑定的前提是必须在对一个控件的数据绑定,或放在带有runat=server这句话的HTML标记中才可以。而Eval就没那么别扭了,它的灵活性更宽,可以放在控件中,也可以放在任意的HTML标记中。不过Eval支持的是单向绑定,所谓的单向绑定就是只能从数据库中把数据绑定显示出来,而不能把修改完的数据送到数据库中去。而Bind虽然要求的比较多,但是支持双向绑定,既能够把数据从数据库中显示出来,也能够把数据送回到数据库中去。
---------------------------------------------------------------------
现在再来说说ListView的另一个模板:GroupTemPlate分组模板
我们知道LayoutTemPlate模板放一个Table表格它可以直接包含ItemTemPlate也可以通过包含一个GroupTemPlate 再来通过GroupTemPlate包含ItemTemPlate
GroupTemPlate模板的一个重要的属性:GroupItemCount 设置我这一个模板的一行显示几个ItemTemPlate
下面我们来看一个效果:
来分析一下代码:
<LayoutTemplate>
<table width="100%" border="0" cellspacing="1" cellpadding="1" bgcolor="navy" color=white>
<asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<GroupTemplate>
<tr>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</tr>
</GroupTemplate>
<ItemTemplate>
<td align="center">
<img src='<%# eval_r("Pic") %>' height="50px" width="50px" />
</td>
<td align="center"><%# eval_r("Name") %></td>
<td align="center"><%# eval_r("Price") %></td>
<td align="center"><%# eval_r("Brand") %></td>
<td align="center"><%# eval_r("Oil") %></td>
<td align="center"><%# eval_r("Powers") %></td>
<td align="center"><%# eval_r("Exhaust") %></td>
</ItemTemplate>
后台没什么代码,所以说ListView继承了repeater、DataList、GridView的所有的优点。---------------------------------------------------------------------
用ListView实现分页的效果:
用到的控件DataPager
必须设置两个属性:PageContentID 对谁分页
PageSize 每页显示几行数据
点击DataPager右上角的小三角形,然后点击:编辑页导航字段
比较可行的分页是用配合ObjectDataSource实现分页或使用存储过程实现分页,或使用LinQ实现分页。这个思想和repeater、GridView、DataList实现分页一样。
---------------------------------------------------------------------