0

Here's the GridView:

<asp:GridView ID="MyGridView" runat="server" AllowPaging="true" AllowSorting="true"
    OnPageIndexChanging="MyGridView_PageIndexChanging"
    OnSorting="MyGridView_Sorting">
    <Columns>
        <asp:TemplateField HeaderText="ID" SortExpression="Id">
            <ItemTemplate>
                <asp:Label ID="idLabel" runat="server" Text='<%# Bind("Id") %>' />
            </ItemTemplate>
       </asp:TemplateField>
    </Columns>
</asp:GridView>

Here, the Id column is a string consisting always of the letter "T" followed by a number, i.e. "T1" or "T597" The other columns are fairly ordinary name and description String fields.

I need this Id column to sort as though the Id were numeric, ignoring the letter in front. But because it is there, it is being treated as a String and sorting as such: T1, T10, T100, T2, T231, T34, ...

So what I thought would be possible is:

protected void MyGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    if (e.SortExpression.Equals("Id")
    {
         // Special sorting code
    }
    else
    {
        // Normal sorting code
    }
}

Where the "normal" sorting code follows the common pattern of converting the DataSource to DataView and setting DataView.Sort = e.SortExpression etc, for example: allow sorting by column gridview

So what do I do for the "special" sorting code?

UPDATE: Just to be clear, I have no trouble rolling my own function to compare two strings as I need. I do not, however, know how to apply that function to my Data Grid/ Data Source.

2 Answers 2

1

You can implement the IComparer class for the DataGridView.Sort:

http://msdn.microsoft.com/en-us/library/wstxtkxs%28v=vs.85%29.aspx

You can separate the "T" and the following number in the Compare method.

Sign up to request clarification or add additional context in comments.

Comments

0

The GridView allows DataKeyNames, and that is the solution here. When setting up the Data Source (in my case, a SQL query) include both the "FullId" and a "PlainId" which has stripped off the leading character and parsed the remainder as int. Use "FullId" as the column's text value, but make "PlainId" one of the DataKeyNames and use that as the SortExpression for the column.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.