0

我正在使用 ajax 自动完成功能,它调用 Web 服务来搜索名称和代码(名称和代码是我的数据表的字段)

它工作正常

这是我的网络服务网络方法

   [WebMethod]
        public string[] GetSupplier(string prefixText)
        {
            con.Open();
            //int count = 10;
            string sql = "Select * from SupplierMaster where name like @prefixText  ";
            SqlDataAdapter da = new SqlDataAdapter(sql, con);
            da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 500).Value = prefixText + "%";
            DataTable dt = new DataTable();
            da.Fill(dt);
            string[] List = new string[100];
            int i = 0;

            foreach (DataRow dr in dt.Rows)
            {
                List.SetValue(dr["name"].ToString(), i);
                i++;
            }

         string sql1 = "Select * from SupplierMaster where codelike @prefixText  ";
            SqlDataAdapter da1 = new SqlDataAdapter(sql1, con);
            da1.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 500).Value = prefixText + "%";
            DataTable dt = new DataTable();
            da1.Fill(dt);
            string[] List = new string[100];
            int i = 0;
            foreach (DataRow dr in dt.Rows)
            {
                List.SetValue(dr["name"].ToString(), i);
                i++;
            }
            con.Close();
            return List;

        }

这是 .aspx 文件中的自动完成扩展器

  <asp:AutoCompleteExtender runat="server" ID="AutoCompleteExtender3" TargetControlID="txtsear" ServicePath="~/Search.asmx" ServiceMethod="GetSupplier"

 MinimumPrefixLength="1" CompletionSetCount="10" 
CompletionListCssClass="autocomplete_completionListElement"
 CompletionListItemCssClass="autocomplete_listItem" 
                                                                    CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"
 </asp:AutoCompleteExtender>
4

2 回答 2

1

这是我的做法,适用于您的表格/字段:

using System.Collections.Generic;
// your class/namespace etc.

[WebMethod]
public List<string> GetSupplier(string prefixText)
{
    string SQL = "Select * from SupplierMaster where name like '%" + prefixText.Replace("'", "''") + "%' ";

    SqlConnection cnn = new SqlConnection(ConnectionStringGoesHere);
    SqlCommand cmd = new SqlCommand(SQL, cnn);
    cmd.CommandType = CommandType.Text;

    List<string> returnvalues = new List<string>();

    try
    {
        cnn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            returnvalues.Add(dr["name"].ToString());
        }
    }
    finally
    {
        cnn.Close();
    }

    return returnvalues;
}

我冒昧地在您的搜索文本前面加上通配符后缀%;你可能不想要那个。

现在,如果您想搜索两个字段,您可以使用:

    string SQL = "Select * from SupplierMaster where name like '%" + prefixText.Replace("'", "''") + "%' OR code like '%" + prefixText.Replace("'", "''") + "%' ";

编辑

从您自己的回答中,我看到您正在组合代码和名称字段。我更愿意使用上面较短的代码,但使用 UNION 查询,如下所示:

string SQL = "Select name from SupplierMaster where name like '%" + prefixText.Replace("'", "''") + "%' UNION Select code from SupplierMaster where code like '%" + prefixText.Replace("'", "''") + "%' ";
于 2012-07-05T08:25:09.120 回答
0

我得到了答案,

  [WebMethod]
        public string[] GetSupplier(string prefixText)
        {
            con.Open();
            //int count = 10;
            string sql = "Select * from SupplierMaster where name like @prefixText";
            SqlDataAdapter da = new SqlDataAdapter(sql, con);
            da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 500).Value = prefixText + "%";
            DataTable dt = new DataTable();
            da.Fill(dt);
            string[] List = new string[100];
            int i = 0;
            foreach (DataRow dr in dt.Rows)
            {
                List.SetValue(dr["name"].ToString(), i);
                i++;
            }

            string sql1 = "Select * from SupplierMaster where code like @prefixText";
            SqlDataAdapter da1 = new SqlDataAdapter(sql1, con);
            da1.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 500).Value = prefixText + "%";
            DataTable dt1 = new DataTable();
            da1.Fill(dt1);
            //string[] List = new string[dt.Rows.Count];
            //int i = 0;
            foreach (DataRow dr in dt1.Rows)
            {
                List.SetValue(dr["code"].ToString(), i);
                i++;
            }
            con.Close();
            return List;

        }
于 2012-07-05T08:27:47.503 回答