我可以从AjaxToolKit将DataTable用于AutoCompleteExtender吗?

时间:2012-09-11 13:00:05

标签: c# asp.net datatable autocompleteextender

我构建了一个ASP.NET Web应用程序,我有一个TextBox,用户可以在其中找到其他用户。为此,我想使用AjaxToolKit中的AutoCompleteExtender。我从Active Directory获取的数据。如果我启动我的页面应用程序使用ActiveDirectory中的所有UserDate创建一个DataTable,我的问题是。

我可以将DataTabe用于AutoCompleteExtender中的信息吗?如果我能用这个怎么用呢?

1 个答案:

答案 0 :(得分:1)

根据official documentation你不能。您不仅不能使用DataTable,还必须实现Web服务,并在其中实现具有非常特定签名的Web方法。

如果您不介意使用jQuery,我可以使用jQuery向您展示一个示例。

更新:

使用jQuery,您需要做的就是在标记中包含以下库:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.8.23/jquery-ui.min.js" type="text/javascript"></script>

在您的标记上,您可以添加asp:hiddenElement以及将用于自动完成的文本元素:

<asp:HiddenElement id="hdnAutoComplete" runat="server" />
<asp:TextBox id="txtAutoComplete" runat="server" />

现在,您只需添加以下Javascript函数:

$(function(){
var items = eval($('#<%=hdnAutoComplete.ClientID%>').val());

  $( "#<%=txtAutoComplete.ClientID%>" ).autocomplete({
     source: items
   });

});

最后,您需要从codebhind设置要用于自动完成的元素。由于您想使用DataTable,我将向您展示一个简单的方法:

protected void Page_Load(object sender, EventArgs e)
{
     DataTable t = ...//your datatable is this

     var query = (from c in t.AsEnumerable()
                 select c.Field<string>("NameOfTheColumnYouWant")).ToArray();

     //this will create a javascript array on the client-side when it's eval'd 
     hdnAutoComplete.Value = "["+string.Join(",",query)+"]";

}

从jQuery UI的官方文档here中阅读更多示例。