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>
 
---------------------------------------------------------------------
下面我用这些模板来实现两个效果:
第一个效果的显示结果:
ListView控件的基本操作 它的后台代码我和大家来分析分析:
首先是LayoutTemplate模板中的代码,这可以说使我们最常用到的一个模板:
ListView控件的基本操作 我们显示数据的表格就放在这里面,然后显示的那块以前称作头模板的代码页写在这里面。继续分析:
ListView控件的基本操作 我标出来的一个重要的属性:itemPlaceholder,它会自动的去找ItemTemplate模板中的内容。那这就好办了,我们的ItemTemplate模板可以做了。注意:我们必须设itemPlaceholder这个属性,不设置或写错了,那就完蛋了,除非说把这个属性的名称给改成自己想要的:在哪里改?在ListView属性中的:
ListView控件的基本操作去改,改成自己想要的,然后填写自己改的那个名称就可以了。
ListVIew的ItemTemPlate的做法和repeater做ItemTemPlate一样:
ListView控件的基本操作 不多说了,关键是上面注意的内容。
再就是在这里绑定数据的时候,只能用Eval去绑定(单向绑定),而不能用Bind双向绑定。因为我们在这里用到的是TD标记,而不是一个控件。Bind双向绑定的前提是必须在对一个控件的数据绑定,或放在带有runat=server这句话的HTML标记中才可以。而Eval就没那么别扭了,它的灵活性更宽,可以放在控件中,也可以放在任意的HTML标记中。不过Eval支持的是单向绑定,所谓的单向绑定就是只能从数据库中把数据绑定显示出来,而不能把修改完的数据送到数据库中去。而Bind虽然要求的比较多,但是支持双向绑定,既能够把数据从数据库中显示出来,也能够把数据送回到数据库中去。
---------------------------------------------------------------------
现在再来说说ListView的另一个模板:GroupTemPlate分组模板
我们知道LayoutTemPlate模板放一个Table表格它可以直接包含ItemTemPlate也可以通过包含一个GroupTemPlate 再来通过GroupTemPlate包含ItemTemPlate
 
GroupTemPlate模板的一个重要的属性:GroupItemCount 设置我这一个模板的一行显示几个ItemTemPlate
下面我们来看一个效果:
ListView控件的基本操作 这就是用GroupTemPlate实现的效果:
来分析一下代码:
<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    每页显示几行数据
ListView控件的基本操作 ListView控件的基本操作 对DataPager控件外观的显示进行控制:
点击DataPager右上角的小三角形,然后点击:编辑页导航字段
ListView控件的基本操作 效果如下:
ListView控件的基本操作 这种分页的缺陷还是把数据从数据库中放入到List泛型集合中,然后放到内存中进行分页。缺陷和用GridView配合SqlDataSource实现分页缺陷一样。
比较可行的分页是用配合ObjectDataSource实现分页或使用存储过程实现分页,或使用LinQ实现分页。这个思想和repeater、GridView、DataList实现分页一样。
---------------------------------------------------------------------
原文地址:https://www.cnblogs.com/suizhikuo/p/2293751.html