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的StartRowIndexParamterName\MaximumRowsParamterName確定的,一般不需要改,當然你也可以用其它名稱,但要在屬性中改成你自己的名字),都為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> </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頁的數據了。
轉載于:https://www.cnblogs.com/yagzh2000/p/3169797.html
總結
- 上一篇: sublime text 2快捷键总结
- 下一篇: mint锁屏设置