• 《ASP.NET1200例》ListView 控件与DataPager控件的结合<二>


    ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示

    为什么使用ListView+DataPager的方式实现分页显示?

     .net提供的诸多数据绑定控件,每一种都有它自己的优点和缺点。如果需要对数据进行操作,如果数据量不大的情况下,DataList和GridView是最好的选择,但是他们会生产额外的<table><tr><tbody><td>标签。如果只是罗列出来一些简单的数据,出于对性能的考虑,repeater必然是首选。当然ListView和DataPager的组合必将是开发中的黄金组合,无论从性能上和功能实现上都是很棒的控件。扩展性强,灵活度高:ListView控件集成了DataGridDataListRepeaterGridView控件的所有功能。它可以像Repeater控件那样,让我们在控件内写任何HTML代码。

    .NET 3.5中给我们提供的新数据绑定控件ListViewDataPager,可以说,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

    它 有很多的模板。 其中有许多新增的模板,如GroupTemplateInsertItemTemplate。但我一般常用的就是 ItemTemplate,AlternatingItemTemplate ,EditItemTemplate ,InsertItemTemplate这几个。 

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

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

    <asp:ListView ID="lv2" runat="server"
    
          onpagepropertieschanging="lv_PagePropertiesChanging2"
    
          onitemcanceling="lv2_ItemCanceling" onitemediting="lv2_ItemEditing"
    
          onitemupdating="lv2_ItemUpdating"
    
          onitemdeleting="lv2_ItemDeleting" DataKeyNames="id">
    
        <EditItemTemplate>
    
           <div class="lvData">
    
              <div class="id"><%#eval_r("id")%></div>
    
              <div class="proId"><%#eval_r("provinceID")%></div>
    
              <div class="proName">
    
                  <asp:TextBox ID="txt" runat="server" Text='<%#eval_r("province")%>'></asp:TextBox></div>
    
                  <div class="edit">
    
                     <asp:LinkButton ID="lbtnEdit" runat="server" CommandName="Update" >更新</asp:LinkButton>
    
                     <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Cancel" >取消</asp:LinkButton>
    
                  </div>
    
              </div>
    
        </EditItemTemplate>
    
           <ItemTemplate>
    
              <div class="lvData">
    
                 <div class="id"><%#eval_r("id")%></div>
    
                 <div class="proId"><%#eval_r("provinceID")%></div>
    
                 <div class="proName"><%#eval_r("province")%></div>
    
                 <div class="edit">
    
                     <asp:LinkButton ID="lbtnEdit" runat="server" CommandName="Edit" >编辑</asp:LinkButton>
    
                     <asp:LinkButton ID="LinkButton2" runat="server" CommandName="Delete" >删除</asp:LinkButton>
    
                 </div>
    
             </div>
    
         </ItemTemplate>
    
         <AlternatingItemTemplate>
    
            <div class="lvData alterStyle">
    
                <div class="id"><%#eval_r("id")%></div>
    
                <div class="proId"><%#eval_r("provinceID")%></div>
    
                <div class="proName"><%#eval_r("province")%></div>
    
                <div class="edit">
    
                    <asp:LinkButton ID="lbtnEdit" runat="server" CommandName="Edit" >编辑</asp:LinkButton>
    
                    <asp:LinkButton ID="LinkButton3" runat="server" CommandName="Delete" >删除</asp:LinkButton>
    
                </div>
    
            </div>
    
        </AlternatingItemTemplate>  
    
    </asp:ListView>
    
     
    View Code
    增加分页功能
    如 果你想为ListView增加分页功能的话,那么就需要使用DataPager控件了。这个分页控件是一个独立的控件,你可以把它放到页面的任何位置,然后使其联到你的ListView控件就可以完成分页的工作了。该分页控件所呈现出来的HTML标记为内联(Inline)元素,所以如果你想精确地设置其位置的话,可以参考下面的代码,为其包裹一个<div />标记。 

     

    给ListView控件添加以下属性,在翻页时给控件绑定新的页面索引:
    onpagepropertieschanging="lv_PagePropertiesChanging2"


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

    <asp:DataPager ID="DataPager2" PagedControlID="lv2" runat="server">

            <Fields>

                <asp:NextPreviousPagerField ShowFirstPageButton="True" 

                    ShowLastPageButton="True" ShowNextPageButton="True"

                    ShowPreviousPageButton="True" />

            </Fields>

        </asp:DataPager>


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


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


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

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

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

  • 相关阅读:
    RocketMQ源码分析:(二)消息发送的三种方式
    LTS本地搭建详述
    Mac端解决(含修改8.0.13版的密码):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    flink入门:01 构建简单运行程序
    rocketmq控制台搭建(rocketmq-console)
    在consul上注册web服务
    将filenames里的每个字符串输出到out文件对象中注意行首的缩进
    spidermark sensepostdata ntp_monlist.py
    HTTP Error 403没有了,但是中文全都是乱码。又是怎么回事?
    original.txt和提交的页面输出的文字的混合文件
  • 原文地址:https://www.cnblogs.com/abc8023/p/3455318.html
Copyright © 2020-2023  润新知