Asp.net Ajax AutoCompleteXtender调用webservice从数据库的两个字段进行搜索,现在可以使用了
我正在使用ajax autocomplete,它调用web服务来搜索名称和代码(名称和代码是我的数据表的字段) 它很好用 这是我的webservice的WebMethodAsp.net Ajax AutoCompleteXtender调用webservice从数据库的两个字段进行搜索,现在可以使用了,asp.net,sql,ajax,web-services,autocomplete,Asp.net,Sql,Ajax,Web Services,Autocomplete,我正在使用ajax autocomplete,它调用web服务来搜索名称和代码(名称和代码是我的数据表的字段) 它很好用 这是我的webservice的WebMethod [WebMethod] public string[] GetSupplier(string prefixText) { con.Open(); //int count = 10; string sql = "Sele
[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>
以下是我的做法,适合您的表格/字段:
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 name from SupplierMaster where name like '%" + prefixText.Replace("'", "''") + "%' UNION Select code from SupplierMaster where code like '%" + prefixText.Replace("'", "''") + "%' ";
我得到了答案
[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;
}
它是否只使用名称字段,现在您想添加代码,还是完全不工作,甚至只使用名称字段,如上所述?我已经编辑了它的正确内容&正在工作。
[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;
}