2015-03-16 3 views
3

мне нужно создать DropDownList где пользователь может выбрать значение из DropDownList или введите значение в.редактируемые Выпадающее в C#

Точно так же как: «Где вы пришли?» Выпадающего списка в ссылке ниже :

http://www.dhtmlgoodies.com/scripts/form_widget_editable_select/form_widget_editable_select.html

Я знаю, что это общий вопрос, и есть подобные запросы на переполнение стека, как хорошо, но я не мог найти простой рабочий раствор.

я упомянул следующие ссылки:

http://www.codeproject.com/Articles/8578/Editable-Dropdown-DHTML-Behavior http://www.codeproject.com/Articles/290218/Custom-ASP-NET-Editable-DropDownList http://codeverge.com/asp.net.web-forms/editable-dropdown-list-c/392261

Кто-нибудь работал на этом раньше и дать мне представление о том, как я могу продолжить?

+1

выпадающий является то, что вы хотите, как правило, контролируют WebForms, но есть один в AjaxControlToolkit: http://www.asp.net/web- формы/обзор/ajax-control-toolkit/combobox/how-do-i-use-the-combobox-control-cs –

+0

@ Hugo- Я изучу это и дам вам знать! – user1698232

+0

Я рекомендую Select2, доступный здесь: https://select2.github.io/ – Family

ответ

0

Вы можете попробовать использовать JokeryUI Autocomplete Combobox.
Он позволит вам вводить текст, а также выбирать элемент по своему выбору из выпадающего списка.
В качестве дополнительной функции он позволяет использовать функцию автозаполнения, чтобы получить улучшенный интерфейс пользовательского интерфейса.

Я прилагаю демку, которая связана с бутстрапом 3.3.4

<!DOCTYPE html> 
 

 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 

 
<head runat="server"> 
 
    <title></title> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" /> 
 
    <link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" /> 
 

 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
 
    <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
 
    <link href="https://jqueryui.com/resources/demos/style.css" rel="stylesheet" /> 
 
    <style> 
 
    .custom-combobox { 
 
     position: relative; 
 
     display: inline-block; 
 
    } 
 
    .custom-combobox-toggle { 
 
     position: absolute; 
 
     top: 0; 
 
     bottom: 0; 
 
     margin-left: -1px; 
 
     padding: 0; 
 
    } 
 
    .custom-combobox-input { 
 
     margin: 0; 
 
     padding: 5px 10px; 
 
    } 
 
    .ui-state-default, 
 
    .ui-widget-content .ui-state-default, 
 
    .ui-widget-header .ui-state-default { 
 
     border: 1px solid #421D1D; 
 
     background: #ffffff url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x !important; 
 
     font-weight: normal; 
 
     color: #555555; 
 
    } 
 
    /* Corner radius */ 
 
    .ui-corner-all, 
 
    .ui-corner-top, 
 
    .ui-corner-left, 
 
    .ui-corner-tl { 
 
     border-top-left-radius: 0px !important; 
 
    } 
 
    .ui-corner-all, 
 
    .ui-corner-top, 
 
    .ui-corner-right, 
 
    .ui-corner-tr { 
 
     border-top-right-radius: 0px !important; 
 
    } 
 
    .ui-corner-all, 
 
    .ui-corner-bottom, 
 
    .ui-corner-left, 
 
    .ui-corner-bl { 
 
     border-bottom-left-radius: 0px !important; 
 
    } 
 
    .ui-corner-all, 
 
    .ui-corner-bottom, 
 
    .ui-corner-right, 
 
    .ui-corner-br { 
 
     border-bottom-right-radius: 0px !important; 
 
    } 
 
    </style> 
 
    <script> 
 
    (function($) { 
 
     $.widget("custom.combobox", { 
 
     _create: function() { 
 
      this.wrapper = $("<span>") 
 
      .addClass("custom-combobox") 
 
      .insertAfter(this.element); 
 

 
      this.element.hide(); 
 
      this._createAutocomplete(); 
 
      this._createShowAllButton(); 
 
     }, 
 

 
     _createAutocomplete: function() { 
 
      var selected = this.element.children(":selected"), 
 
      value = selected.val() ? selected.text() : ""; 
 

 
      this.input = $("<input>") 
 
      .appendTo(this.wrapper) 
 
      .val(value) 
 
      .attr("title", "") 
 
      .addClass("custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left") 
 
      .autocomplete({ 
 
       delay: 0, 
 
       minLength: 0, 
 
       source: $.proxy(this, "_source") 
 
      }) 
 
      .tooltip({ 
 
       tooltipClass: "ui-state-highlight" 
 
      }); 
 

 
      this._on(this.input, { 
 
      autocompleteselect: function(event, ui) { 
 
       ui.item.option.selected = true; 
 
       this._trigger("select", event, { 
 
       item: ui.item.option 
 
       }); 
 
      }, 
 

 
      autocompletechange: "_removeIfInvalid" 
 
      }); 
 
     }, 
 

 
     _createShowAllButton: function() { 
 
      var input = this.input, 
 
      wasOpen = false; 
 

 
      $("<a>") 
 
      .attr("tabIndex", -1) 
 
      .attr("title", "Show All Items") 
 
      .tooltip() 
 
      .appendTo(this.wrapper) 
 
      .button({ 
 
       icons: { 
 
       primary: "ui-icon-triangle-1-s" 
 

 
       }, 
 
       text: false 
 
      }) 
 
      .removeClass("ui-corner-all") 
 
      .addClass("custom-combobox-toggle ui-corner-right") 
 
      .mousedown(function() { 
 
       wasOpen = input.autocomplete("widget").is(":visible"); 
 
      }) 
 
      .click(function() { 
 
       input.focus(); 
 

 
       // Close if already visible 
 
       if (wasOpen) { 
 
       return; 
 
       } 
 

 
       // Pass empty string as value to search for, displaying all results 
 
       input.autocomplete("search", ""); 
 
      }); 
 
     }, 
 

 
     _source: function(request, response) { 
 
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
 
      response(this.element.children("option").map(function() { 
 
      var text = $(this).text(); 
 
      if (this.value && (!request.term || matcher.test(text))) 
 
       return { 
 
       label: text, 
 
       value: text, 
 
       option: this 
 
       }; 
 
      })); 
 
     }, 
 

 
     _removeIfInvalid: function(event, ui) { 
 

 
      // Selected an item, nothing to do 
 
      if (ui.item) { 
 
      return; 
 
      } 
 

 
      // Search for a match (case-insensitive) 
 
      var value = this.input.val(), 
 
      valueLowerCase = value.toLowerCase(), 
 
      valid = false; 
 
      this.element.children("option").each(function() { 
 
      if ($(this).text().toLowerCase() === valueLowerCase) { 
 
       this.selected = valid = true; 
 
       return false; 
 
      } 
 
      }); 
 

 
      // Found a match, nothing to do 
 
      if (valid) { 
 
      return; 
 
      } 
 

 
      // Remove invalid value 
 
      this.input 
 
      .val("") 
 
      .attr("title", value + " didn't match any item") 
 
      .tooltip("open"); 
 
      this.element.val(""); 
 
      this._delay(function() { 
 
      this.input.tooltip("close").attr("title", ""); 
 
      }, 2500); 
 
      this.input.autocomplete("instance").term = ""; 
 
     }, 
 

 
     _destroy: function() { 
 
      this.wrapper.remove(); 
 
      this.element.show(); 
 
     } 
 
     }); 
 
    })(jQuery); 
 

 
    $(function() { 
 
     $("#combobox").combobox(); 
 
     $("#toggle").click(function() { 
 
     $("#combobox").toggle(); 
 
     }); 
 
    }); 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <form id="form1" runat="server"> 
 
    <div> 
 
     <div class="ui-widget"> 
 
     <select id="combobox" class="form-control"> 
 
      <option value="">Select your option</option> 
 
      <option value="Apple">Apple</option> 
 
      <option value="Banana">Banana</option> 
 
      <option value="Cherry">Cherry</option> 
 
      <option value="Date">Date</option> 
 
      <option value="Fig">Fig</option> 
 
      <option value="Grape">Grape</option> 
 
      <option value="Kiwi">Kiwi</option> 
 
      <option value="Mango">Mango</option> 
 
      <option value="Orange">Orange</option> 
 
      <option value="Pumpkin">Pumpkin</option> 
 
      <option value="Strawberry">Strawberry</option> 
 
      <option value="Tomato">Tomato</option> 
 
      <option value="Watermelon">Watermelon</option> 
 
     </select> 
 
     </div> 
 

 
    </div> 
 
    </form> 
 
</body> 
 

 
</html>
Я тестировал этот код на все настройки ниже тестирования среды:
Chrome Browser Версия 43.0.2334.0 dev-m (64-разрядный)
Internet Explorer 11
Firefox 36.0.1
Visual Studio 2013 выпуск

Надеюсь, это решит вашу проблему.

+0

Возможно ли, что значения поступают из базы данных? – user1698232

+0

Да, чтобы получить их из базы данных, вы должны запросить их из базы данных на C# с помощью WCF/.asmx WebService и добавить их как JSON в раскрывающийся список через WebMethod в C# –

+0

О, Боже мой! Я не знаю WCF и JSON. Нет другого подхода к этому? – user1698232

0

Другое решение заключается в следующем
Вы можете использовать Ajax Control Toolkit NuGet

Шаг 1: Добавьте Ajax Control Toolkit из пакетов NuGet в ваших ссылках

Шаг 2 : Если вы не используете элементы управления Ajax Control Toolkit в своей панели инструментов, вам нужно создать отдельную вкладку и назовите ее Ajax Toolkit Controls.
Затем щелкните по нему правой кнопкой мыши и выберите пункты.
Перейдите к местоположению, где расположена dll Ajax Control Toolkit, выберите его.
Вы увидите набор элементов управления, заполняемых в окне.
Выберите «ОК», это приведет к заполнению вкладки с помощью элементов управления Ajax Control Toolkit.

Шаг 3: Поскольку управления Инструментарий Ajax являются дополнительные надстройки пакет, вы должны зарегистрировать их в качестве части страницы с помощью them.If устанавливается как NuGet, этот шаг можно пренебречь.

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %> 

Примечание: tagprefix должен соответствовать tagprefix используемого вами в вашей программе для управления AjaxControlToolkit.

Шаг 4: Добавить элемент управления ScriptManager, он необходим для поддержки функций AJAX на стороне клиента. В результате он загружает и регистрирует библиотеку Microsoft AJAX для включения функций.

<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 Browser Version 43.0.2334.0 dev-m (64-bit)
Internet Explorer 11
Firefox 36.0.1
Visual Studio 2013 издание

+0

Это дает мне ошибку: Ошибка Тип или имя пространства имен 'ComboBox' не существует в пространстве имен 'AjaxControlToolkit' (вам не хватает ссылки на сборку?) – user1698232

+0

Включили ли вы AjaxControlToolkit в свои ссылки?Если не попробовать еще раз установить весь AjaxControlToolkit, который поставляется вместе с другими инструментами и пакетами на рынке Nuget. –

0

Этот плагин JQuery будет решить вашу проблему, оказывается раскрывающихся списков в автозаполнения, как поле, даже если он изменяет HTML структуру избранных элемент ASP.NET все еще может определить, какая опция была выбрана.

Источник: https://github.com/indrimuska/jquery-editable-select

OBS: Для сохранения данных обратной передачи необходимо связать события, связанные с постбэка с JavaScript, сделать «Combo Box» в DropDownList снова (с сохраняемого значения).

Пример использования:

$('#editable-select').editableSelect();
<link href="//rawgithub.com/indrimuska/jquery-editable-select/master/dist/jquery-editable-select.min.css" rel="stylesheet"> 
 
<select id="editable-select"> 
 
    <option>Alfa Romeo</option> 
 
    <option>Audi</option> 
 
    <option>BMW</option> 
 
    <option>Citroen</option> 
 
</select> 
 
<script src="//code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<script src="//rawgithub.com/indrimuska/jquery-editable-select/master/dist/jquery-editable-select.min.js"></script>