• 10.高效分布


    • ListView默认的分页是先从数据源取得所有数据,然后再截取当前页面的部分,在数据量非常大的情况下效率非常低,因此默认的分布基本不能用。应该是只从数据源取得要显示的数据即可。
    • SQL中语句中取得分页数据的方法为:Select * ,ROW_NUMBER() over(order by 排序字段) as rownum From Table. ROW_NUMBER()函数是SQL2005之后提供的一个计算结果集行数的函数,over中指定排序规则,Row_Number()从1开始。只是把数据中的记录从1排序。
    • SQL语句可以这样排序:Select * from (Select id,name,age,Row_Number() over(order by id) rownum from table1) as t1 where t1.rownum>50 and t1.rownum<=100,取第51到100条的记录。
    • 在强类型DataSet中增加取得所有数据条数的方法QueryCount,增加取得指定行数范围数据的方法GetPagedData:Select * from (select ...,ROW_NUMBER() over(order by ...) rownum from table1) t where t.rownum>@startRowIndex and t.rownum<=@startRowIndex+@maximumRows.
    • 由于数据集编辑器不支持(不是运行时不支持,只是设计器不会自动帮我们生成一些东西)ROW_NUMBER(),所以创建完成后需要手动在GetPagedData属性的Parameters中增加两个参数:startRowIndex,maximumRows(参数名必须是这两个,这是由ObjectDataSource的StartRowIndexParamterNameMaximumRowsParamterName确定的,一般不需要改,当然你也可以用其它名称,但要在属性中改成你自己的名字),都为Int32类型。
    • 先按照正常的流程配置ObjectDataSource,让ListView自动生成Template,再修改ObjectDataSource的EnablePaging="True",SelectCountMethod设置为取得行数的方法。
    • ObjectDataSource中EnablePaging属性设置为True,SelectCountMethod设置为QueryCount,SelectMethod设置为GetPagedData.
    • 如果出错的话看看是不是没有放置内置的DataPager或者外置的DataPager的PagedControlID没有指向ListView.
    • DataPager默认是用PostBack机制,显示不到地址中,不利于网友间共享,只要指定QueryStringField属性(比如pagenum)就可以实现超连接形式的分布连接。

    实例练习:

       给一数据表中的数据显示出来,每10条为一页。

      1.建立数据表及强类型数据集(操作步骤忽略)

      2.在强类型数据集中建立以下过程:GetAllData方法:SELECT COUNT(*) FROM T_User,主要是得到总的记录数。GetPageCount方法:select id, name, age from
    (
    SELECT id, name, age,ROW_NUMBER() over(order by id) rownumber FROM dbo.T_User
    ) t where t.rownumber>@startrow and t.rownumber<=@startrow+@pagecounts 主要是用于得到哪一页中的数据。要手工增加@startrow和@pagecounts参数,这两个参数没有严格按照以上的参数来设置,记得以后要修改ObjectDataSource中的相关属性。

      3.在web表单上放上ObjectDataSource和ListView,先按正常的配置进行操作和分页功能。再在ObjectDataSource的向导进行操作,在“定义方法”中选择GetPageCount来得到每页的值,其它的不用处理 。

      4.修改ObjectDataSource的相关属性,记着要设置EnablePaging为true哦。如下图源码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="高效分布.aspx.cs" Inherits="行命令设置.高效分布" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
                DeleteMethod="Delete" EnablePaging="True" InsertMethod="Insert" 
                MaximumRowsParameterName="pagecounts" 
                OldValuesParameterFormatString="original_{0}" SelectCountMethod="GetAllData" 
                SelectMethod="GetPageCount" StartRowIndexParameterName="startrow" 
                TypeName="行命令设置.DAL.DataSetUserTableAdapters.T_UserTableAdapter" 
                UpdateMethod="Update">
                <DeleteParameters>
                    <asp:Parameter Name="Original_id" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="name" Type="String" />
                    <asp:Parameter Name="age" Type="Int32" />
                </InsertParameters>
               
                <UpdateParameters>
                    <asp:Parameter Name="name" Type="String" />
                    <asp:Parameter Name="age" Type="Int32" />
                    <asp:Parameter Name="Original_id" Type="Int32" />
                </UpdateParameters>
            </asp:ObjectDataSource>
            <asp:ListView ID="ListView1" runat="server" DataKeyNames="id" 
                DataSourceID="ObjectDataSource1" InsertItemPosition="LastItem">
                <AlternatingItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />
                            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />
                        </td>
                        <td>
                            <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
                        </td>
                        <td>
                            <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' />
                        </td>
                        <td>
                            <asp:Label ID="ageLabel" runat="server" Text='<%# Eval("age") %>' />
                        </td>
                    </tr>
                </AlternatingItemTemplate>
                <EditItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" />
                            <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" />
                        </td>
                        <td>
                            <asp:Label ID="idLabel1" runat="server" Text='<%# Eval("id") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="ageTextBox" runat="server" Text='<%# Bind("age") %>' />
                        </td>
                    </tr>
                </EditItemTemplate>
                <EmptyDataTemplate>
                    <table runat="server" style="">
                        <tr>
                            <td>
                                未返回数据。</td>
                        </tr>
                    </table>
                </EmptyDataTemplate>
                <InsertItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="插入" />
                            <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" />
                        </td>
                        <td>
                            &nbsp;</td>
                        <td>
                            <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="ageTextBox" runat="server" Text='<%# Bind("age") %>' />
                        </td>
                    </tr>
                </InsertItemTemplate>
                <ItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />
                            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />
                        </td>
                        <td>
                            <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
                        </td>
                        <td>
                            <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' />
                        </td>
                        <td>
                            <asp:Label ID="ageLabel" runat="server" Text='<%# Eval("age") %>' />
                        </td>
                    </tr>
                </ItemTemplate>
                <LayoutTemplate>
                    <table runat="server">
                        <tr runat="server">
                            <td runat="server">
                                <table ID="itemPlaceholderContainer" runat="server" border="0" style="">
                                    <tr runat="server" style="">
                                        <th runat="server">
                                        </th>
                                        <th runat="server">
                                            id</th>
                                        <th runat="server">
                                            name</th>
                                        <th runat="server">
                                            age</th>
                                    </tr>
                                    <tr ID="itemPlaceholder" runat="server">
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr runat="server">
                            <td runat="server" style="">
                                <asp:DataPager ID="DataPager1" runat="server" QueryStringField="pagenum">
                                    <Fields>
                                        <asp:NumericPagerField />
                                    </Fields>
                                </asp:DataPager>
                            </td>
                        </tr>
                    </table>
                </LayoutTemplate>
                <SelectedItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />
                            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />
                        </td>
                        <td>
                            <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
                        </td>
                        <td>
                            <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' />
                        </td>
                        <td>
                            <asp:Label ID="ageLabel" runat="server" Text='<%# Eval("age") %>' />
                        </td>
                    </tr>
                </SelectedItemTemplate>
            </asp:ListView>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        
        </div>
        </form>
    </body>
    </html>

     5.生成解决方案后运行,你会发现可以正常分页了,但会发现不论是第一页还是第4页时,地址栏都是没有变化的,当你想把第3页的连接给一个朋友看时,会发现当打开这个连接时显示的还是第一页。 我们可以在  DataPager的属性中设置QueryStringField值为"pagenum"。这样你再运行点击第一页的连接时,会在地址栏中显示?pagenum=...这样的数据,当你要把第三页的内容给朋友时,只要地址栏中有pagenum=这样的字样就可以直接查看第3页的数据了。

  • 相关阅读:
    Servlet系列教材 (九)- 基础
    Servlet系列教材 (八)- 基础
    Servlet系列教材 (七)- 基础
    Servlet系列教材 (六)- 基础
    Servlet系列教材 (五)- 基础
    Servlet系列教材 (四)- 基础
    Servlet系列教材 (三)- 基础
    Servlet系列教材 (二)- 基础
    Servlet系列教材 (一)- 基础
    Tomcat系列教材 (八)- 部署J2EE应用
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/3169797.html
Copyright © 2020-2023  润新知