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

Natural Sort vs. Alphabetical Sort

3 Answers 274 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Zack Turnbow
Top achievements
Rank 1
Zack Turnbow asked on 11 Jun 2008, 04:33 PM
I'm using a RadGrid found in RadControls for ASPNET AJAX Q1 2008.

I've got alphanumeric data in a column that I need to sort via natural sort. Please look at this for better information about natural sort: http://www.codinghorror.com/blog/archives/001018.html

I tried getting it to work and I have been unsuccessful. Has anyone else tried implementing this in a RadGrid with out having to call the DB again?

Any suggestions are greatly appreciated.

Zack

3 Answers, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 12 Jun 2008, 07:44 AM
Hi Zack,

Go through the following online demo.
Basic sorting

Shinu.
0
Zack Turnbow
Top achievements
Rank 1
answered on 12 Jun 2008, 12:19 PM
Shinu, thanks for the advise but I've already looked at the demos and documentation about this issue. The natural sort in the demo is natural order that the data was loaded into the grid. However, I changed my data so it would work. So this isn't an issue any more.
0
Kent
Top achievements
Rank 1
answered on 19 Apr 2011, 06:11 AM
Im having the same problem... any advice?

Current sorting:
10th
11th
1st
20th
2nd
... Named Streets

What I need:
1st
2nd
10th
11th
20th
... Named Streets

If there is not an easy switch, can I write my own sort algorith and override the current for a given column?

Here it is as a SQL SP:
ALTER FUNCTION [dbo].[SortAlphaNum]
(
    @ColValue NVARCHAR(255)
)
RETURNS NVARCHAR(1000)
AS
  
BEGIN
    DECLARE @p1 NVARCHAR(255),
        @p2 NVARCHAR(255),
        @p3 NVARCHAR(255),
        @p4 NVARCHAR(255),
        @Index TINYINT
          
    IF @ColValue LIKE '[a-z]%'
        SELECT  @Index = PATINDEX('%[0-9]%', @ColValue),
            @p1 = LEFT(CASE WHEN @Index = 0 THEN @ColValue ELSE LEFT(@ColValue, @Index - 1) END + REPLICATE(' ', 255), 255),
            @ColValue = CASE WHEN @Index = 0 THEN '' ELSE SUBSTRING(@ColValue, @Index, 255) END
    ELSE
        SELECT  @p1 = REPLICATE(' ', 255)
      
    SELECT      @Index = PATINDEX('%[^0-9]%', @ColValue)
  
    IF @Index = 0
        SELECT  @p2 = RIGHT(REPLICATE(' ', 255) + @ColValue, 255),
            @ColValue = ''
    ELSE
        SELECT  @p2 = RIGHT(REPLICATE(' ', 255) + LEFT(@ColValue, @Index - 1), 255),
            @ColValue = SUBSTRING(@ColValue, @Index, 255)
      
    SELECT      @Index = PATINDEX('%[0-9,a-z]%', @ColValue)
  
    IF @Index = 0
        SELECT  @p3 = REPLICATE(' ', 255)
    ELSE
        SELECT  @p3 = LEFT(REPLICATE(' ', 255) + LEFT(@ColValue, @Index - 1), 255),
            @ColValue = SUBSTRING(@ColValue, @Index, 255)
  
    IF PATINDEX('%[^0-9]%', @ColValue) = 0
        SELECT  @p4 = RIGHT(REPLICATE(' ', 255) + @ColValue, 255)
    ELSE
        SELECT  @p4 = LEFT(@ColValue + REPLICATE(' ', 255), 255)
      
    RETURN      @p1 + @p2 + @p3 + @p4
END




Tags
Grid
Asked by
Zack Turnbow
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Zack Turnbow
Top achievements
Rank 1
Kent
Top achievements
Rank 1
Share this question
or