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


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

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

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

    代码
    <!--

    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的汉字转拼音首字母的函数:

    代码
    <!--

    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:

    代码
    <!--

    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);
            }
     
  • 相关阅读:
    菜鸟版JAVA设计模式—从买房子看代理模式
    NTP工作机制及时间同步的方法
    Java工厂模式
    圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略
    对javabean的内省操作
    插入排序(insertion sort)
    中英文对照 —— 十二星座
    中英文对照 —— 十二星座
    数学归纳法的相关证明
    数学归纳法的相关证明
  • 原文地址:https://www.cnblogs.com/51net/p/2390461.html
Copyright © 2020-2023  润新知