gpt4 book ai didi

c# - AjaxControlToolkit 自动完成字典

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:50 24 4
gpt4 key购买 nike

我正在使用 AjaxControlToolkit,并将其自动完成扩展绑定(bind)到文本框。

使用原始代码,我可以让它完美地工作。我的要求已经从仅查询和发送一组数据发展到必须使用 key 发送该数据。

例如:
当用户输入一些文本时,查询会搜索 3 个表的可能性,然后发回所有结果。我现在想将这些结果绑定(bind)到它从中获取的表。
key 不必显示在扩展器上,只需显示值即可。

我的想法是将结果绑定(bind)到字典,然后循环遍历它以获取值(将值绑定(bind)到字符串 [] 以返回自动完成),然后使用键在另一个文本框中进行分配所选变量来自。

当前代码.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
}

最佳答案

主要问题是您试图将重复键添加到字典中。使用 List<KeyValuePair<string, string>>集合代替:

var values = new List<KeyValuePair<string, string>>();

// select data from first table
foreach (var id in Enumerable.Range(1,10))
{
values.Add(new KeyValuePair<string,string>("Table1_" + id.ToString(), Guid.NewGuid().ToString() );
}

//select data from the second table
foreach (var id in Enumerable.Range(1,10))
{
values.Add(new KeyValuePair<string,string>("Table2_" + id.ToString(), Guid.NewGuid().ToString() );
}

if(values.Count == 0)
{
values.Add(new KeyValuePair<string,string>("", "There are no users to display"));
}

return values.Select( pair => AutoCompleteExtender.CreateAutoCompleteItem(pair.Value, pair.Key)).ToArray();

请注意,项目的键是由源表名和键值本身生成的。

然后,在页面上添加到 AutoCompleteExtender OnClientItemSelected客户端事件处理程序并在表单上添加隐藏字段以存储所选项目值:

<script type="text/javascript">
function itemSelected(sender, args) {
$get("<%= AutoCompleteSelectedValue.ClientID %>").value = args.get_value();
}
</script>

<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtMainSearch"
ServiceMethod="GetCompletionList" CompletionInterval="500" FirstRowSelected="True"
CompletionListCssClass="completionList" CompletionListItemCssClass="listItem"
CompletionListHighlightedItemCssClass="itemHighlighted"
OnClientItemSelected="itemSelected">

<asp:HiddenField runat="server" ID="AutoCompleteSelectedValue" />

之后您可以从 AutoCompleteSelectedValue 隐藏字段中获取选定值并解析它。

关于c# - AjaxControlToolkit 自动完成字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12599411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com