It was a requirment in one of my projects, that we have to show sort images alongwith header text, so I googled the problem and find a solution, but solution was not generic, so I did some tweaks with it and the outcome is a generic function to show sort images in your GridView header alongwith column text.

So here goes the functions...................~

C#

void GridViewSortImages(object sender, GridViewRowEventArgs e)

    {
 GridView  senderGridView = (GridView) sender;
        Literal space = new Literal();
        space.Text = "    ";

        if (e.Row != null && e.Row.RowType == DataControlRowType.Header)

        {

            foreach (TableCell cell in e.Row.Cells)

            {

                if (cell.HasControls())

                {

                    LinkButton button = cell.Controls[0] as LinkButton;

 

                    if (button != null)

                    {

                        Image image = new Image();

                        image.ImageUrl = "default.gif";

 

                        if (senderGridView.SortExpression == button.CommandArgument)

                        {

                            if (senderGridView.SortDirection == SortDirection.Ascending)

                                image.ImageUrl = "asc.gif";

                            else

                                image.ImageUrl = "desc.gif";

                        }

 

                        cell.Controls.Add(image);

                    }

                }

            }

        }

    }


VB.NET

Sub GridViewSortImages(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
            Dim senderGridView As GridView = CType(sender, GridView)
            Dim space As New Literal
            space.Text = "    "

            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\clear.gif"
                            If senderGridView.SortExpression = button.CommandArgument Then
                                If senderGridView.SortDirection = SortDirection.Ascending Then
                                    image.ImageUrl = "\images\glyphs\arrow_down.gif"
                                Else
                                    image.ImageUrl = "\images\glyphs\arrow_up.gif"
                                End If
                            End If
                            cell.Controls.Add(image)
                        End If
                    End If
                Next
            End If
        End Sub

 

You can use this code by simply binding GridView's RowCreated event.

Links:


Use an Up and Down arrow in the GridView's header columns - by Fredrik Normen


Happy Coding :)