<%@ Page Language="VB" Debug="False" Strict="True" Explicit="True" Buffer="True"%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<head>
<title>DataGrid Sort</title>
</head>
<body bgcolor="#FFFFFF" topmargin="0" marginheight="0">
<script language="VB" runat="server">
Sub Page_Load (sender As Object, e As EventArgs)
    
If SortExp.Text = "" then
        BindSQL (
"title asc")
    
Else
        BindSQL (SortExp.Text)
    
End If
End Sub


Sub BindSQL (SortField As String)
    
Dim MyConnection As SqlConnection
    
Dim MyCommand As SqlDataAdapter
    
Dim DS as Dataset
    
Dim sqlStr As String = "SELECT authors.au_fname, authors.au_lname, titles.title, titles.price FROM authors, titleauthor, titles WHERE titleauthor.au_id = authors.au_id AND titleauthor.title_id = titles.title_id ORDER BY title asc"
    Dim strConn As String = "server=(local);uid=sa;pwd=;database=pubs;Trusted_Connection=yes;"
    Dim RcdCount As Integer
    SortExp.Text 
= SortField
    MyConnection 
= New SqlConnection(strConn)
    MyCommand 
= New SqlDataAdapter(sqlStr, MyConnection)
    DS 
= new Dataset()
    MyCommand.Fill(DS, 
"pubs")
    
Dim Source As DataView = DS.Tables(0).DefaultView
    Source.Sort 
= SortField
    Pubs.DataSource 
= Source
    Pubs.Databind()
End Sub


Function SortOrder (Field As StringAs String    
    
Dim so As String = SortExp.Text
    
If Field = so Then
        SortOrder 
= Replace (Field,"asc","desc")
    
Else
        SortOrder 
= Replace (Field,"desc","asc")
    
End If
End Function


Sub BookList_Sort (Sender As Object, E As DataGridSortCommandEventArgs)   
    pubs.CurrentPageIndex 
= 0 
    BindSQL (SortOrder (E.SortExpression).ToString()) 
End Sub


Sub BookList_PageChange (Source As Object, E As DataGridPageChangedEventArgs)  
    pubs.CurrentPageIndex 
= E.NewPageIndex
    BindSQL(SortExp.Text)
End Sub


</script>

<form runat="server">
<ASP:Datagrid id="Pubs" runat="server"
    Pagesize="10"
    AllowSorting="True"
    AllowPaging="True"
    AllowCustomPaging="False"
    PagerStyle-Visible = "True"
    PagerStyle-Mode = "NumericPages"
    HeaderStyle-BackColor="Blue"
    HeaderStyle-ForeColor="White"
    OnSortCommand="BookList_Sort"
    OnPageIndexChanged="BookList_PageChange"
    AutoGenerateColumns="false"
    Width="500">
    
<Columns>
        
<asp:BoundColumn HeaderText="Title" SortExpression="title asc" DataField="title" Headerstyle-Horizontalalign="Center" ItemStyle-Wrap="false"/>
        
<asp:BoundColumn HeaderText="Last Name" SortExpression="au_lname asc" DataField="au_lname" Headerstyle-Horizontalalign="Center" ItemStyle-Wrap="false"/>
        
<asp:BoundColumn HeaderText="First Name" SortExpression="au_fname asc" DataField="au_fname" Headerstyle-Horizontalalign="Center" ItemStyle-Wrap="false"/>
        
<asp:BoundColumn HeaderText="Price" SortExpression="price asc" DataField="price" Headerstyle-Horizontalalign="Center" ItemStyle-Wrap="false"/>
    
</Columns>
    
</ASP:DataGrid>
    
<asp:Label id="SortExp" runat="server" Visible="true"/>
</form>
</body>
</html>