用TextBox + DropDownExtender + AutoCompleteExtender 实现即可选也可输入的对话框,内容来自数据库


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,aspx文件:
<asp:UpdatePanel ID=”UpdatePanel2″ runat=”server”>
??????????????????????? <ContentTemplate>
??????????????????????????? <asp:TextBox ID=”txtModel” Text=”” runat=”server” Width=”130px” CssClass=”MustInputText”></asp:TextBox>
?????????????????????????? <asp:Panel CssClass=”ContainPanel” ID=”Panel2″ runat=”server”? Width=”130px”
??????????????????????????????? Style=”visibility: hidden” >
??????????????????????????????? <asp:GridView ID=”gdModel” runat=”server” ShowHeader=”False” BorderWidth=”0px” OnRowCreated=”gdModel_RowCreated”>
??????????????????????????????? </asp:GridView> //当可选时用GridView获取数据库数据,用来显示下拉框
??????????????????????????? </asp:Panel>
??????????????????????????
??????????????????????????? <cc1:DropDownExtender ID=”DropDownExtender2″ runat=”server” DropDownControlID=”Panel2″
??????????????????????????????? TargetControlID=”txtModel” Enabled=”true”>
??????????????????????????? </cc1:DropDownExtender>
??????????????????????????? <cc1:AutoCompleteExtender ID=”AutoCompleteExtender3″ runat=”server” TargetControlID=”txtModel”? CompletionInterval=”100″? //触发时间
??????????????????????????????? CompletionSetCount=”10″ EnableCaching=”true” MinimumPrefixLength=”1″ ServiceMethod=”GetModelList1″
??????????????????????????????? ServicePath=”~/WebService/AutoCompleteService.asmx”>
??????????????????????????? </cc1:AutoCompleteExtender>? //AutoComplete用来自动填充功能
??????????????????????? </ContentTemplate>
??????????????????? </asp:UpdatePanel>

注:DropDownExtender :用来在下拉时填充。主要是为TxtBox增加下拉功能,显示的内容来自 DropDownControlID, DropDownControlID用来指向用什么块显示,TargetControlID用来指向哪个控件触发,事件为点击。

?????? AutoCompleteExtender :用来输入时自动带出数据库中的相关提示。TargetControlID指向哪个控件触发,事件为输入。当输入时,调用webservice,执行ServiceMethod方法,返回string[]数组,用来显示下拉的内容如:
public string[] GetModelList1(string prefixText, int count)??????? //prefixText名称保持不变
??? {
??????? ProductBL _ProductBL = new ProductBL();
??????? SqlDataReader dr = _ProductBL.GetModelsByCategory(“乐知购”);
??????? DataTable dt = new DataTable();
??????? dt.Load( dr );
??????? List<String> Models = new List<string>(dt.Rows.Count);
??????? for (int i = 0; i < dt.Rows.Count; i++)
??????? {
??????????? Models.Add(dt.Rows[i][“Model”].ToString());
??????? }

??????? List<String> returnlist = new List<string>();
??????? foreach( string s in Models ){
??????????? if ( s.IndexOf(prefixText)!= -1 ){
??????????????? returnlist.Add(s);
??????????? }
??????? }
???????
??????
??????? return returnlist.ToArray();
??? }

注:(1)要想用此控件,要引入AjaxControlToolkit.dll
?????? (2)页面上放置: <asp:ScriptManager ID=”ScriptManager1″ runat=”server”>? </asp:ScriptManager>

2, 两个控件都启作用时会乱,一般进行控制,当一定条件时enabled = false;