我正在使用 AjaxControlToolkit,并将其 AutoComplete 扩展绑定到文本框。
使用原始代码,我可以让它完美地工作。我的需求已经从仅仅查询和发送一组数据演变为必须使用密钥发送该数据。
例如:
当用户输入一些文本时,查询会在 3 个表中搜索一个可能性,然后发回所有结果。我现在想将这些结果绑定到从中获取的表中。
密钥不必显示在扩展器上,只需显示值。
我的想法是将结果绑定到字典,然后遍历它以获取值(将值绑定到字符串 [] 以返回自动完成),然后使用键在另一个文本框中分配所选变量的位置从。
当前代码.aspx:
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtMainSearch" ServiceMethod="GetCompletionList" CompletionInterval="500" FirstRowSelected="True" CompletionListCssClass="completionList" CompletionListItemCssClass="listItem" CompletionListHighlightedItemCssClass="itemHighlighted"></ajaxToolkit:AutoCompleteExtender>
。CS
[WebMethod, ScriptMethod]
public static string[] GetCompletionList(string prefixText)
{
ArrayList srings = new ArrayList();
int counter = 0;
SqlConnection db = DataConn.SqlConnection();
db.Open();
SqlTransaction transaction = db.BeginTransaction();
Dictionary<string, string> dictionary = new Dictionary<string, string>();
try
{
SqlCommand command = new SqlCommand("[Table 1]" + prefixText + "[Var]", db, transaction);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
counter = counter + 1;
dictionary.Add("ItemOne", reader["something"].ToString());
}
}
command = new SqlCommand("[Table 2]", db, transaction);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
counter = counter + 1;
dictionary.Add("ItemTwo", reader["something"].ToString());
}
}
transaction.Commit();
}
catch (SqlException)
{
transaction.Rollback();
dictionary.Add("Error", "Problem Getting Results");
}
if (counter == 0)
dictionary.Add("Error", "There are no users to display");
foreach (KeyValuePair<string, string> valuePair in dictionary)
{
srings.Add(valuePair.Value);
}
return null; //This isnt really null... Just accidently deleted the code
}