当前位置:首页>>ASP.NET教程>>Asp.NET综合技巧>>设置DropDownList的项按字母顺序排列并入字母分隔线
设置DropDownList的项按字母顺序排列并入字母分隔线
2009/11/8 13:19:18

    这里用到几个函数,一个SQL自定义函数,主要按汉语拼音字母排序,这个函数来源于网上收集,记不得作者是谁了,还有那个取汉字首字母(大写),首先在这里感谢他们。

Create  function GetPy(@str nvarchar(4000))
returns nvarchar(4000)      
  as
begin
declare @word nchar(1),@PY nvarchar(4000)
set @PY=''
while len(@str)>0
begin
set @word=left(@str,1)
--如果非汉字字符,返回原字符
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 PY from (
select 'A' as PY,N'驁' as word
union all select 'B',N'簿'
union all select 'C',N'錯'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鰒'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'漚'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'籜'
union all select 'W',N'鶩'
union all select 'X',N'鑂'
union all select 'Y',N'韻'
union all select 'Z',N'咗'
) T 
where word>=@word collate Chinese_PRC_CS_AS_KS_WS 
order by PY ASC) else @word end)
set @str=right(@str,len(@str)-1)
end
return @PY
end

然后在查询进,用这样SQL语句

Select Id,Title From Table_a order by dbo.getpy(title)

这样做后TITLE已经按汉语拼音字母顺序排列了,
还有一个取汉字取拼音首字母(大写) 函数

 1 Public Shared Function Extract_HZ()Function Extract_HZ(ByVal HZ As String) As String
 2                Dim ZW(2) As Byte
 3                Dim HZ_INT As Long
 4                ZW = System.Text.Encoding.Default.GetBytes(HZ)
 5                Dim i1 As Integer = CType((ZW(0)), Short)
 6                Dim i2 As Integer = CType((ZW(1)), Short)
 7                HZ_INT = i1 * 256 + i2
 8                If (HZ_INT >= 45217) AndAlso (HZ_INT <= 45252) Then
 9                    Return "A"
10                End If
11                If (HZ_INT >= 45253) AndAlso (HZ_INT <= 45760) Then
12                    Return "B"
13                End If
14                If (HZ_INT >= 45761) AndAlso (HZ_INT <= 46317) Then
15                    Return "C"
16                End If
17                If (HZ_INT >= 46318) AndAlso (HZ_INT <= 46825) Then
18                    Return "D"
19                End If
20                If (HZ_INT >= 46826) AndAlso (HZ_INT <= 47009) Then
21                    Return "E"
22