This is a migrated thread and some comments may be shown as answers.

[Solved] Custom Sorting with GridTemplateColumn, show Sort Image.

5 Answers 182 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Eric
Top achievements
Rank 1
Eric asked on 08 Feb 2013, 02:29 PM
Lets say I have the following GridTemplateColumn, I use a LinkButton for Custom Sorting and I handle that sorting in the ItemCommand event of the Grid (CommandName="cmdSortBySender")


   <telerik:GridTemplateColumn HeaderStyle-Width="160px" ShowSortIcon="true"  >
    <HeaderTemplate>
        <asp:LinkButton ID="lnkSortBySender" runat="server" CommandName="cmdSortBySender" >
        </asp:LinkButton>
    </HeaderTemplate>
    <ItemTemplate>
        <asp:Label Text='<%# DataBinder.Eval(Container,"DataItem.SenderName") %>' runat="server" />
    </ItemTemplate>
    </telerik:GridTemplateColumn>


Since I'm clicking on the LinkButton the Sort Image is not showing up, Is there anyway I can make the Sort Image appear the way I'm doing this custom sorting?

Thank you.

5 Answers, 1 is accepted

Sort by
0
Eric
Top achievements
Rank 1
answered on 11 Feb 2013, 11:59 PM
My only problem with this is showing the sort image in custom sorting.
0
Shinu
Top achievements
Rank 2
answered on 12 Feb 2013, 06:27 AM
Hi,

One suggestion is to add image to the HeaderTemplate next to the Linkbutton. Please check the code.

C#:
protected void rad_ItemCreated(object sender, GridItemEventArgs e)
{
    if (e.Item is GridHeaderItem)
    {
        GridHeaderItem header = (GridHeaderItem)e.Item;
        Image asc = new Image();
        asc.ID = "asc";
        img.ImageUrl = "Images/sortasc.gif";
 
        Image dsc = new Image();
        dsc.ID = "dsc";
        dsc.ImageUrl = "Images/sortdsc.gif";
 
        header["UniqueName"].Controls.AddAt(2, dsc);
        header["UniqueName"].Controls.AddAt(2, asc);
         
        if (rad.MasterTableView.SortExpressions.Count != 0 && rad.MasterTableView.SortExpressions[0].FieldName == "DataField")
        {
            if (rad.MasterTableView.SortExpressions[0].SortOrder != GridSortOrder.None)
            {
                header["UniqueName"].Controls.Remove(asc);
                header["UniqueName"].Controls.Remove(dsc);
            }
            if (rad.MasterTableView.SortExpressions[0].SortOrder == GridSortOrder.Ascending)
            {             
                header["UniqueName"].Controls.Remove(dsc);
            }
            if (rad.MasterTableView.SortExpressions[0].SortOrder == GridSortOrder.Descending)
            {
                header["UniqueName"].Controls.Remove(asc);
            }
        }
    }
}

Thanks,
Shinu
0
Eric
Top achievements
Rank 1
answered on 12 Feb 2013, 02:35 PM
Hello Shinu
Is there any way to make this process work with multiple columns ?
I have 5 columns that use custom sorting and having to create a code like that for each one of them is repetitive.
0
Shinu
Top achievements
Rank 2
answered on 13 Feb 2013, 12:53 PM
Hi,

I suppose you are having 5 GridTemplateColumn. Please try the following code snippet to show an image while sorting.

C#:
protected void RadGrid1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
    if (e.Item is GridHeaderItem)
    {
        foreach (GridTemplateColumn col in RadGrid1.Columns)
        {
 
            if (e.Item is GridHeaderItem)
            {
                GridHeaderItem header = (GridHeaderItem)e.Item;
                Image asc = new Image();
                asc.ID = "asc";
                img.ImageUrl = "Images/sortasc.gif";
 
                Image dsc = new Image();
                dsc.ID = "dsc";
                dsc.ImageUrl = "Images/sortdsc.gif";
 
                header["col.UniqueName"].Controls.AddAt(2, dsc);
                header["col.UniqueName"].Controls.AddAt(2, asc);
 
                if (rad.MasterTableView.SortExpressions.Count != 0 && rad.MasterTableView.SortExpressions[0].FieldName == col.DataField)
                {
                    if (rad.MasterTableView.SortExpressions[0].SortOrder != GridSortOrder.None)
                    {
                        header["col.UniqueName"].Controls.Remove(asc);
                        header["col.UniqueName"].Controls.Remove(dsc);
                    }
                    if (rad.MasterTableView.SortExpressions[0].SortOrder == GridSortOrder.Ascending)
                    {
                        header["col.UniqueName"].Controls.Remove(dsc);
                    }
                    if (rad.MasterTableView.SortExpressions[0].SortOrder == GridSortOrder.Descending)
                    {
                        header["col.UniqueName"].Controls.Remove(asc);
                    }
                }
            }
        }
    }
}

Thanks,
Shinu.
0
Min-Jie
Top achievements
Rank 1
answered on 30 Jul 2013, 01:02 PM
Do you have any sample code if I need to implement the sorting images on the client side?
Tags
Grid
Asked by
Eric
Top achievements
Rank 1
Answers by
Eric
Top achievements
Rank 1
Shinu
Top achievements
Rank 2
Min-Jie
Top achievements
Rank 1
Share this question
or