You don't need to sort inside sorting event. You just bind the grid with new sortexpression.
Following is not needed:
grdItems.SortDirection = WebControls.SortDirection.Ascending Then
grdItems.Sort(sortExpression, WebControls.SortDirection.Descending)
Else
grdItems.Sort(sortExpression, WebControls.SortDirection.Ascending)
End If
Write something like this instead:
If grdItems.SortDirection = WebControls.SortDirection.Ascending Then
grdItems.sortexpression =sortExpression + " " + WebControls.SortDirection.Descending
Else
grdItems.sortexpression =sortExpression + " " + WebControls.SortDirection.Ascending
End If
grdItems.databind()