2011年7月15日 星期五

ListView排序功能(不須寫Code-Behind)


 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListViewSort.aspx.cs" Inherits="ListViewSort" %>

 <html>
 <head runat="server">
   <title>ListViewSort</title>
 </head>
 <body>
   <form id="form1" runat="server">
   <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
        SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice]
                       FROM [Products]
                       Order by UnitPrice ASC ">
   </asp:SqlDataSource>
   <div  style="width:500px;float:left;">
     <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" >
       <ItemTemplate>
         <tr>
           <td>
             <asp:Label ID="ProductIDLabel" runat="server" Text='<%#Eval("ProductID") %>' />
           </td>
           <td>
             <asp:Label ID="ProductNameLabel" runat="server"  Text='<%#Eval("ProductName") %>' />
           </td>
           <td>
             <asp:Label ID="UnitPriceLabel" runat="server" Text='<%#Eval("UnitPrice") %>' />
           </td>
         </tr>
       </ItemTemplate>
       <LayoutTemplate>
         <table ID="itemPlaceholderContainer" runat="server" border="1"
           <tr runat="server" style="background-color:#DCDCDC;color: #000000;"> 
             <th>
               <asp:LinkButton Text="產品編號" CommandName="sort" CommandArgument="ProductID" runat="server" />
             </th>
             <th>
               <asp:LinkButton  Text="產品名稱" CommandName="sort" CommandArgument="ProductName" runat="server" />
             </th>
             <th>
               <asp:LinkButton  Text="單價" CommandName="sort" CommandArgument="UnitPrice" runat="server" />
             </th>
           </tr>
           <tr ID="itemPlaceholder" runat="server">
           </tr>
           <tr>
             <td colspan="3"  runat="server">
               <asp:DataPager ID="DataPager1" runat="server" PageSize="20">
                 <Fields>
                   <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />
                 </Fields>
               </asp:DataPager>
             </td>
           </tr>
         </table>
       </LayoutTemplate>

     </asp:ListView>
   </div>
 </form>
 </body>
 </html>

重點就是在<table>的標題列,把想要排序欄位的標題弄成Button,然後CommandName=”sort”,CommandArgument=”欄位名稱”
ListView就可以排序了

只是很奇妙的是,因為SQL語法Order by UnitPrice ASC,所以第一次按單價按鈕沒有反應,要按第二次才會排序。

第一次執行網頁(確實按照UnitPrice遞增排序)
第一次執行網頁(確實按照UnitPrice遞增排序)
按下產品編號後,依產品編號遞增排序
再按一次產品編號,依產品編號遞減排序
點下一頁後,排序仍然依產品編號遞減

沒有留言:

張貼留言