C# C语言中的可编辑下拉列表

C# C语言中的可编辑下拉列表,c#,asp.net,drop-down-menu,webforms,C#,Asp.net,Drop Down Menu,Webforms,我需要创建一个dropdownlist,用户可以在其中从dropdownlist中选择一个值或在中键入值 就像你从哪里来的?在以下链接中的下拉列表: 我知道这是一个常见的问题,也有关于堆栈溢出的类似查询,但我找不到一个简单可行的解决方案 我参考了以下链接: 以前有没有人做过这方面的工作,并告诉我如何继续?您可以尝试使用JqueryUI自动完成组合框。 它将允许您键入文本,并从下拉列表中选择您选择的项目。 作为一个额外的功能,它允许您使用自动完成功能来获得增强的UI体验 我附上了一个演示,它与

我需要创建一个dropdownlist,用户可以在其中从dropdownlist中选择一个值或在中键入值

就像你从哪里来的?在以下链接中的下拉列表:

我知道这是一个常见的问题,也有关于堆栈溢出的类似查询,但我找不到一个简单可行的解决方案

我参考了以下链接:


以前有没有人做过这方面的工作,并告诉我如何继续?

您可以尝试使用JqueryUI自动完成组合框。 它将允许您键入文本,并从下拉列表中选择您选择的项目。 作为一个额外的功能,它允许您使用自动完成功能来获得增强的UI体验

我附上了一个演示,它与bootstrap 3.3.4相结合

.自定义组合框{ 位置:相对位置; 显示:内联块; } .自定义组合框切换{ 位置:绝对位置; 排名:0; 底部:0; 左边距:-1px; 填充:0; } .自定义组合框输入{ 保证金:0; 填充物:5px10px; } .ui状态默认值, .ui小部件内容.ui状态默认值, .ui小部件标题.ui状态默认值{ 边框:1px实心421d; 背景:ffffffurlmages/ui-bg_glass_75_e6e6_1x400.png 50%50%repeat-x!重要; 字体大小:正常; 颜色:555555; } /*角半径*/ .所有, .ui角顶部, .ui左角, .ui角tl{ 边框左上半径:0px!重要; } .所有, .ui角顶部, .ui右角, .ui角tr{ 边框右上角半径:0px!重要; } .所有, .ui角底, .ui左角, .ui角bl{ 边框左下半径:0px!重要; } .所有, .ui角底, .ui右角, .ui角落br{ 边框右下半径:0px!重要; } 功能${ $.widgetcustom.combobox{ _创建:函数{ 此.wrapper=$ .addClasscustom组合框 .insertafter this.element; 这个元素是隐藏的; 这是.\u createAutocomplete; 这是.\u createShowAllButton; }, _createAutocomplete:函数{ var selected=this.element.children:selected, value=selected.val?selected.text:; 此参数。输入=$ .appendTothis.wrapper .阀门价值 .头衔, .addClasscustom组合框输入ui小部件ui小部件内容ui状态默认ui左角 .自动完成{ 延迟:0, 最小长度:0, 来源:$。代理此,\u来源 } .工具提示{ tooltipClass:ui状态高亮显示 }; 在这个输入上{ 自动完成选择:功能事件,用户界面{ ui.item.option.selected=true; 此.\u触发器选择,事件{ 项目:ui.item.option }; }, AutoCompleteTechange:\u RemoveFinValid }; }, _createShowAllButton:函数{ var input=this.input, wasOpen=false; $ .attrtabIndex,-1 .attrtitle,显示所有项目 .工具提示 .appendTothis.wrapper .按钮{ 图标:{ 主要:ui-icon-triangle-1-s }, 文本:false } .removeClassui角所有 .addClasscustom组合框右键切换ui .mousedown函数{ wasOpen=input.autocompletewidget.is:可见; } .点击功能{ 输入焦点; //如果已经可见,请关闭 如果是开放的{ 回来 } //将空字符串作为要搜索的值传递,显示所有结果 input.autocompletesearch; }; }, _来源:functionrequest,response{ var matcher=new RegExp$.ui.autocomplete.escapeRegexrequest.term,i; responsethis.element.childrenoption.mapfunction{ var text=$this.text; 如果此.value&!request.term | | matcher.testtext 返回{ 标签:文本, 值:文本, 选项:这个 }; }; }, _RemoveFinValid:functionevent,ui{ //已选择项目,无需执行任何操作 if ui.item{ 回来 } //搜索匹配项不区分大小写 var值=this.input.val, valueLowerCase=value.toLowerCase, 有效=错误; this.element.childrenoption.eachfunction{ 如果$this.text.toLowerCase===valueLowerCase{ this.selected=valid=true; 返回false; } }; //找到一根火柴,没什么可做的 如果有效{ 回来 } //删除无效值 这是输入 瓦尔先生 .attrtitle,value+与任何项目都不匹配 .工具提示笔; this.element.val; 这是一个延迟函数{ this.input.tooltipclose.attrtitle; }, 2500; this.input.autocompleteinstance.term=; }, _破坏:功能{ 这个.wrapper.remove; 这个元素显示; } }; }jQuery; $function{ $combobox.combobox; $toggle.clickfunction{ $combobox.toggle; }; }; 选择您的选项 苹果 香蕉 樱桃 日期 无花果 葡萄 几维鸟 芒果 橙色 南瓜 草莓 番茄 西瓜 另一个解决方案如下 您可以使用Ajax控件工具包Nuget

步骤1: 在参考资料中添加Nuget包中的Ajax控件工具包

步骤2: 如果没有将Ajax控件工具箱控件放入工具箱,则需要创建一个单独的选项卡,并将其命名为Ajax工具箱控件。 然后右键单击它并选择“选择项目”。 浏览到Ajax控件工具包的dll所在的位置,选择它。 您将看到一组控件填充到窗口中。 选择Ok,这将导致用Ajax控件工具箱控件填充选项卡

步骤3: 由于Ajax Toolkit控件是一个额外的附加包,因此您需要将它们注册为使用它们的页面的一部分

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %>
注意:标记前缀应与您在AjaxControlToolkit控件程序中使用的标记前缀相匹配

步骤4: 添加ScriptManager控件,它是为客户端AJAX特性提供支持所必需的。因此,它加载并注册MicrosoftAjax库以启用这些功能

<asp:ScriptManager ID="ScriptManager1" runat="server" />
步骤5: 继续从工具箱中添加ComboBox,并通过使用SQLDataSource将其链接到数据库来配置它

完整的源代码如下所示

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxComboboxSample.aspx.cs" Inherits="StacksEmptied.AjaxComboboxSample" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <style type="text/css">
        #ComboBox1_ComboBox1_OptionList {
            width: 10% !important;
        }
    </style>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <ajaxToolkit:ComboBox ID="ComboBox1" AppendDataBoundItems="True" runat="server" AutoCompleteMode="Suggest" DataSourceID="SqlDataSource1" DataTextField="Fruits" DataValueField="Fruits" MaxLength="0" Style="display: inline;">
            </ajaxToolkit:ComboBox>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:FruitsConnectionString %>" SelectCommand="SELECT * FROM [Fruits]"></asp:SqlDataSource>
        </div>
    </form>
</body>
</html>
我已在以下所有设置测试环境中测试了此代码: Chrome浏览器版本43.0.2334.0 dev-m 64位 Internet Explorer 11 Firefox 36.0.1
Visual Studio 2013版

此JQuery插件将解决您的问题,它将下拉列表转换为类似自动完成的字段,即使它更改了选择元素的HTML结构,ASP.NET仍然能够检测选择了哪个选项

资料来源:

OBS:要将数据持久化到回发,您需要使用JavaScript绑定与回发相关的事件,将组合框再次设置为具有持久化值的dropdownlist

示例用法:

$“可编辑选择”。可编辑选择; 阿尔法罗密欧 奥迪 宝马 雪铁龙
ComboBox是您想要的,通常是WebForms控件,但AjaxControlToolkit中有一个:@Hugo-我会研究一下并让您知道!我推荐Select2,可在此处获得:@Hugo-我尝试了以下文章,但我猜comboBox不能用于Web表单。显然,如果我没有弄错,它只适用于Windows表单应用程序。如果我弄错了,请纠正我!它们在WebForms中并不是最简单的东西,但该链接是用于在WebForm上使用它的。您需要AjaxControlToolkit,它可以作为NuGet包获得。值是否可能来自数据库?是的,要从数据库获得它们,您必须使用WCF/.asmx WebService从C中的数据库中查询它们,并通过COh my God中的WebMethod将它们作为JSON附加到下拉列表中!我不知道WCF和JSON。没有其他解决方法?它给了我一个错误:错误5命名空间“AjaxControlToolkit”中不存在类型或命名空间名称“ComboBox”是否缺少程序集引用?引用中是否包含AjaxControlToolkit?如果没有,请再次尝试安装整个AjaxControlToolkit,该工具包与Nuget市场上的其他工具和软件包一起提供。