前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >winform用户输入查询与拼音首字母的结合,提高用户的操作体验

winform用户输入查询与拼音首字母的结合,提高用户的操作体验

作者头像
跟着阿笨一起玩NET
发布2018-09-18 13:14:44
1.6K0
发布2018-09-18 13:14:44
举报

在Winform界面中,同样也可以做到智能提示,由于Winform中的响应速度比较快,我们可以根据输入的首字母或者部分中文快速更新列表内容即可,如下图所示。

其实以上两个,都是需要一个Sql函数,就是把中文转换为首字母的函数,以便能够快速搜索内容,下面我列出SqlServer和Oracle的转换首字母的函数。以飨读者。

SqlServer的汉字转拼音码的函数:

代码语言:javascript
复制
代码
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->--
-- Definition for user-defined function f_GetPy :
--
GO
create   
function   [dbo].f_GetPy(@str  nvarchar(4000))
returns   
nvarchar(4000)
as 
begin 
declare   
@strlen   int,@re  nvarchar(4000)
declare   
@t   table(chr  nchar(1)  
 collate   Chinese_PRC_CI_AS,letter  nchar(1))
insert   
into   @t(chr,letter)
    select   
'吖 ','A
'  union  
all   
select  '八
','B
'  union  
all 
    select   
'嚓 ','C
'  union  
all   
select  '咑
','D
'  union  
all 
    select   
'妸 ','E
'  union  
all   
select  '发
','F
'  union  
all 
    select   
'旮 ','G
'  union  
all   
select  '铪
','H
'  union  
all 
    select   
'丌 ','J
'  union  
all   
select  '咔
','K
'  union  
all 
    select   
'垃 ','L
'  union  
all   
select  '嘸
','M
'  union  
all 
    select   
'拏 ','N
'  union  
all   
select  '噢
','O
'  union  
all 
    select   
'妑 ','P
'  union  
all   
select  '七
','Q
'  union  
all 
    select   
'呥 ','R
'  union  
all   
select  '仨
','S
'  union  
all 
    select   
'他 ','T
'  union  
all   
select  '屲
','W
'  union  
all 
    select   
'夕 ','X
'  union  
all   
select  '丫
','Y
'  union  
all 
    select   
'帀 ','Z
'
    select   
@strlen=len(@str),@re='
'
    while   
@strlen>0
    begin 
        select  top  
1  @re=letter+@re,@strlen=@strlen-1
            from  @t   a  
where   chr 
<=substring(@str,@strlen,1)
            order  by   chr  
desc 
        if   
@@rowcount=0
            select  @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1
    end 
    return(@re)
end

复制代码

Oracle的汉字转拼音首字母的函数:

代码语言:javascript
复制
代码
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->CREATE ORREPLACE
FUNCTION F_PINYIN(P_NAMEIN
VARCHAR2)RETURN
VARCHAR2 
AS
     V_COMPARE VARCHAR2(100);
     V_RETURN VARCHAR2(4000);

     FUNCTION F_NLSSORT(P_WORDIN
VARCHAR2)RETURN
VARCHAR2 
AS
     BEGIN
      RETURN NLSSORT(P_WORD,'NLS_SORT=SCHINESE_PINYIN_M');
     END;
    BEGIN

    FOR I 
IN 1..NVL(LENGTH(P_NAME),0)
 LOOP
     V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I,1));
     IF V_COMPARE>= F_NLSSORT('吖')AND
 V_COMPARE<= F_NLSSORT('驁')THEN
      V_RETURN := V_RETURN||
'A';
     ELSIF V_COMPARE >= F_NLSSORT('八')AND
 V_COMPARE<= F_NLSSORT('簿')THEN
      V_RETURN := V_RETURN||
'B';
     ELSIF V_COMPARE >= F_NLSSORT('嚓')AND
 V_COMPARE<= F_NLSSORT('錯')THEN
      V_RETURN := V_RETURN||
'C';
     ELSIF V_COMPARE >= F_NLSSORT('咑')AND
 V_COMPARE<= F_NLSSORT('鵽')THEN
      V_RETURN := V_RETURN||
'D';
     ELSIF V_COMPARE >= F_NLSSORT('妸')AND
 V_COMPARE<= F_NLSSORT('樲')THEN
      V_RETURN := V_RETURN||
'E';
     ELSIF V_COMPARE >= F_NLSSORT('发')AND
 V_COMPARE<= F_NLSSORT('猤')THEN
      V_RETURN := V_RETURN||
'F';
     ELSIF V_COMPARE >= F_NLSSORT('旮')AND
 V_COMPARE<= F_NLSSORT('腂')THEN
      V_RETURN := V_RETURN||
'G';
     ELSIF V_COMPARE >= F_NLSSORT('妎')AND
 V_COMPARE<= F_NLSSORT('夻')THEN
      V_RETURN := V_RETURN||
'H';
     ELSIF V_COMPARE >= F_NLSSORT('丌')AND
 V_COMPARE<= F_NLSSORT('攈')THEN
      V_RETURN := V_RETURN||
'J';
     ELSIF V_COMPARE >= F_NLSSORT('咔')AND
 V_COMPARE<= F_NLSSORT('穒')THEN
      V_RETURN := V_RETURN||
'K';
     ELSIF V_COMPARE >= F_NLSSORT('垃')AND
 V_COMPARE<= F_NLSSORT('擽')THEN
      V_RETURN := V_RETURN||
'L';
     ELSIF V_COMPARE >= F_NLSSORT('嘸')AND
 V_COMPARE<= F_NLSSORT('椧')THEN
      V_RETURN := V_RETURN||
'M';
     ELSIF V_COMPARE >= F_NLSSORT('拏')AND
 V_COMPARE<= F_NLSSORT('瘧')THEN
      V_RETURN := V_RETURN||
'N';
     ELSIF V_COMPARE >= F_NLSSORT('筽')AND
 V_COMPARE<= F_NLSSORT('漚')THEN
      V_RETURN := V_RETURN||
'O';
     ELSIF V_COMPARE >= F_NLSSORT('妑')AND
 V_COMPARE<= F_NLSSORT('曝')THEN
      V_RETURN := V_RETURN||
'P';
     ELSIF V_COMPARE >= F_NLSSORT('七')AND
 V_COMPARE<= F_NLSSORT('裠')THEN
      V_RETURN := V_RETURN||
'Q';
     ELSIF V_COMPARE >= F_NLSSORT('亽')AND
 V_COMPARE<= F_NLSSORT('鶸')THEN
      V_RETURN := V_RETURN||
'R';
     ELSIF V_COMPARE >= F_NLSSORT('仨')AND
 V_COMPARE<= F_NLSSORT('蜶')THEN
      V_RETURN := V_RETURN||
'S';
     ELSIF V_COMPARE >= F_NLSSORT('侤')AND
 V_COMPARE<= F_NLSSORT('籜')THEN
      V_RETURN := V_RETURN||
'T';
     ELSIF V_COMPARE >= F_NLSSORT('屲')AND
 V_COMPARE<= F_NLSSORT('鶩')THEN
      V_RETURN := V_RETURN||
'W';
     ELSIF V_COMPARE >= F_NLSSORT('夕')AND
 V_COMPARE<= F_NLSSORT('鑂')THEN
      V_RETURN := V_RETURN||
'X';
     ELSIF V_COMPARE >= F_NLSSORT('丫')AND
 V_COMPARE<= F_NLSSORT('韻')THEN
      V_RETURN := V_RETURN||
'Y';
     ELSIF V_COMPARE >= F_NLSSORT('帀')AND
 V_COMPARE<= F_NLSSORT('咗')THEN
      V_RETURN := V_RETURN||
'Z';
     END 
IF;
    END LOOP;
    RETURN V_RETURN;
   END;

复制代码

使用代码大概如下所示:

使用例子1:

代码语言:javascript
复制
代码
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->        ///<summary>
        /// 根据商品名称获取商品列表
        /// 
</summary>
        /// 
<param name="goodsType">商品类型</param>
        /// 
<returns></returns>
        public List<GoodsInfo>
 FindByName(string goodsName)
        {
            string sql=
string.Format("Name like '%{0}%' or dbo.f_GetPy(Name) like '{0}%'
", goodsName);
            returnthis.Find(sql);
        }
复制代码
 
转载:http://www.cnblogs.com/wuhuacong/archive/2010/01/25/1655916.html
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档