jQuery自动完成在列和顺序内的搜索

时间:2012-08-07 18:00:27

标签: c# jquery autocomplete ashx

我有jQuery Autocomplete(不是jQueryUI)来搜索我的数据库中的fname和lname。现在很高兴它可以搜索名字,然后过滤掉它并搜索姓氏。但有没有办法让它反过来呢?

即。搜索水晶带来水晶桑托斯,水晶柳条,水晶海耶斯等 但搜索Santos会带来Santos Rameros,Santos Riveria等(假设Santos是fname)

有没有改变这个?为了过滤fname和lname。

我也可以让它在列内搜索吗?我有一个过滤部门,但有些部门有多个值。它只会在移动到第二个之前搜索第一个。

即。搜索医疗办公室控制器,您必须首先搜索医疗。您无法搜索Controller或Office并让它显示结果。

请告诉我是否需要澄清。

Handler ASHX

public void ProcessRequest (HttpContext context) {
    string prefixText = context.Request.QueryString["q"];
    using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["Rollup2ConnectionString"].ConnectionString; 
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SP_AUTOCOMPLETE";                           
            cmd.Parameters.Add(new SqlParameter("@SearchText", SqlDbType.VarChar));      
            cmd.Parameters["@SearchText"].Value = prefixText;             
            cmd.Connection = conn;           
            StringBuilder sb = new StringBuilder();      
            conn.Open();           
            using (SqlDataReader sdr = cmd.ExecuteReader())           
            {               
                while (sdr.Read())   
                {                    
                    sb.Append(sdr["NUID"].ToString() + " ").Append(sdr["FNAME"].ToString() + " ").Append(sdr["LNAME"].ToString() + " ")                       
                        .Append(Environment.NewLine);          
                }        
            }            
        conn.Close();            
        context.Response.Write(sb.ToString());  
        }

    }
}

public bool IsReusable {
    get {
        return false;
    }
}

这是fname lname的一个,除了字段更改之外,部门之一完全相同。

存储过程名称

@SearchText VARCHAR(255)
AS
BEGIN

SET NOCOUNT ON;
SELECT RTRIM(NUID) NUID, RTRIM(FNAME) FNAME, RTRIM(LNAME) LNAME 
FROM T_USER 
WHERE NUID like @SearchText + '%' OR FNAME like @SearchText + '%' OR LNAME like @SearchText + '%'

END

存储过程部门

@SearchText VARCHAR(255)
AS
BEGIN

SET NOCOUNT ON;
SELECT RTRIM(DEPT_DESC) DEPT_DESC, RTRIM(DEPT_ID) DEPT_ID
FROM T_ROLLUP_DEPT
WHERE DEPT_ID like @SearchText + '%' OR DEPT_DESC like @SearchText + '%'

END

1 个答案:

答案 0 :(得分:2)

这更像是一个数据库问题。您需要返回到您的存储过程并添加一个OR子句,如何说

WHERE (FNAME LIKE '%SearchText%') OR (LNAME LIKE '%SearchText%')

调整SQL语句后,当您输入“Santos”时,您将获得Crystal Santos,Santos Rameros,Santos Riveria等。

问题的第二部分还需要调整SQL存储过程。只需将LIKE'%%'添加到WHERE子句中即可。因此,如果您的用户搜索“控制器”,医疗控制人员将会出现。