I have a code snippet I saved sometime ago and it works like a charm. Not sure why an image is not a property field in the .net 3.5 but hopefully they will add it later on. Add this snippet in your code behind and just change the GridView's name as well as the location and name of the image you want to use.
Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
GridViewSortImages(sender, e)
End Sub
Sub GridViewSortImages(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
Dim senderGridView As GridView = CType(sender, GridView)
If Not (e.Row Is Nothing) AndAlso e.Row.RowType = DataControlRowType.Header Then
For Each cell As TableCell In e.Row.Cells
If cell.HasControls Then
Dim button As LinkButton = CType((cell.Controls(0)), LinkButton)
If Not (button Is Nothing) Then
Dim image As New System.Web.UI.WebControls.Image
image.ImageUrl = "~/images/1x1.gif"
If senderGridView.SortExpression = button.CommandArgument Then
If senderGridView.SortDirection = SortDirection.Ascending Then
image.ImageUrl = "~/images/ascending.gif"
Else
image.ImageUrl = "~/images/descending.gif"
End If
End If
cell.Controls.Add(image)
End If
End If
Next
End If
End Sub