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

来源:互联网 发布:客户信息管理系统源码 编辑:程序博客网 时间:2024/06/05 14:31

在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 ORREPLACEFUNCTION F_PINYIN(P_NAMEINVARCHAR2)RETURNVARCHAR2 AS
     V_COMPARE
VARCHAR2(100);
     V_RETURN
VARCHAR2(4000);

    
FUNCTION F_NLSSORT(P_WORDINVARCHAR2)RETURNVARCHAR2 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);
        }
复制代码
 
转载:http://www.cnblogs.com/wuhuacong/archive/2010/01/25/1655916.html