The way I do this is by adding the image on the pre-render of the grid like so:
create a private field:
private property gvSortExpression as string
next on the GridView.Sorting event:
Protected Sub gv_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gv.Sorting
If gvSortExpression <> e.SortExpression Then
gvSortDirection = "ASC"
Else
If gvSortDirection = "ASC" Then
gvSortDirection = "DESC"
Else
gvSortDirection = "ASC"
End If
End If
gvSortExpression = e.SortExpression
LoadGrid()
End Sub
next in the gridview pre-render event add the image:
Protected Sub gv_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles gv.PreRender
If Not String.IsNullOrEmpty(gvSortExpression) Then
Dim img As New Image
Dim colIndex As Integer = 0
Dim dcf As DataControlField = Nothing
For colIndex = 0 To gv.Columns.Count - 1
dcf = gv.Columns(colIndex)
If dcf.SortExpression = gvSortExpression Then
Exit For
End If
Next
gvCurrentColumn = colIndex
img.Style.Add("padding-left", "10px")
If gvCurrentColumn = colIndex Then
If gvSortDirection.ToUpper = "ASC" Then
img.ImageUrl = "~/tblSortDesc.gif"
Else
img.ImageUrl = "~/tblSortAsc.gif"
End If
Else
img.ImageUrl = "~/tblSortAsc.gif"
End If
gv.HeaderRow.Cells(colIndex).Controls.Add(img)
End If
End Sub
and your c# would be:
private string gvSortExpression { get; set; }
protected void gv_Sorting(object sender, System.Web.UI.WebControls.GridViewSortEventArgs e)
{
if (gvSortExpression != e.SortExpression) {
gvSortDirection = "ASC";
} else {
if (gvSortDirection == "ASC") {
gvSortDirection = "DESC";
} else {
gvSortDirection = "ASC";
}
}
gvSortExpression = e.SortExpression;
LoadGrid();
}
protected void gv_PreRender(object sender, System.EventArgs e)
{
if (!string.IsNullOrEmpty(gvSortExpression)) {
Image img = new Image();
int colIndex = 0;
DataControlField dcf = null;
for (colIndex = 0; colIndex <= gv.Columns.Count - 1; colIndex++) {
dcf = gv.Columns(colIndex);
if (dcf.SortExpression == gvSortExpression) {
break;
}
}
gvCurrentColumn = colIndex;
img.Style.Add("padding-left", "10px");
if (gvCurrentColumn == colIndex) {
if (gvSortDirection.ToUpper == "ASC") {
img.ImageUrl = "~/tblSortDesc.gif";
} else {
img.ImageUrl = "~/tblSortAsc.gif";
}
} else {
img.ImageUrl = "~/tblSortAsc.gif";
}
gv.HeaderRow.Cells(colIndex).Controls.Add(img);
}
}