2013-03-05 2 views
4

ID가 NewEmpName 인 드롭 다운 목록 컨트롤이 있습니다. 이 드롭 다운 목록은 직원 사용자 이름으로 데이터베이스에서 자동으로 채워집니다. 이 앱의 사용자는이 앱을 사용하여 요청합니다.autoComplete를 dropdownlist에 추가 한 후 OnSelectedIndexChanged 이벤트가 중지되었습니다. 어떤 아이디어?

사용자가이 시스템에 로그인하면 다른 관련 정보와 함께 사용자 이름이 사용자의 로그인 이름을 기반으로 여러 텍스트 상자에 자동으로 채워집니다.

시스템에 로그인 한 사용자가 다른 직원을 요청하는 경우이 사용자는 대신에 요청하는 직원의 이름을 선택합니다.

NewEmpName 드롭 다운 목록에서 직원의 이름을 선택하면 로그온 한 사용자의 레코드가 들어있는 텍스트 상자가 드롭 다운 목록에서 방금 선택한 직원의 정보로 대체됩니다.

이것은 내가 사용자가 몇 글자를 입력하고 드롭 다운리스트에서 직원의 이름을 선택할 수 있도록 자동 완성 기능을 추가하도록 요청 될 때까지

Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
    empname.Text = CType(sender, DropDownList).SelectedValue 

모든 위대한 일하고 OnSelectedIndexChanged 이벤트를 사용이 가능합니다.

이 자동 완성 기능을 추가하면 OnSelectedIndexChanged 이벤트가 더 이상 실행되지 않습니다.

아이디어가 있으십니까? 드롭 다운리스트 코드와 통합 자동 완성 코드의

Public Sub FillUsers() 
    Dim cmd As New SqlCommand("Select SAMAccountName from ActiveDirectory order by SAMAccountName ASC", New SqlConnection(ConfigurationManager.ConnectionStrings("constr").ConnectionString)) 
    cmd.Connection.Open() 

    Dim ddlValues As SqlDataReader 
    ddlValues = cmd.ExecuteReader() 

    newEmpname.DataSource = ddlValues 
    newEmpname.DataValueField = "SAMAccountName" 
    newEmpname.DataTextField = "SAMAccountName" 
    newEmpname.DataBind() 
    Me.newEmpname.Items.Insert(0, "newEmpname") 

    cmd.Connection.Close() 
    cmd.Connection.Dispose() 
End Sub 

부 : 필요하지만 코드가 매우 긴 경우

Class Item 
    Private _val As String 
    Private _id As String 

    Public Property sAMAccountName() As String 
     Get 
      Return _val 
     End Get 
     Set(ByVal value As String) 
      _val = value 
     End Set 
    End Property 
End Class 

내가 JS 코드를 게시 할 수 있습니다 여기에

는 드롭 다운리스트의 코드 숨김입니다.

자동 완성으로
<link type="text/css" rel="Stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/themes/redmond/jquery-ui.css" /> 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.js"></script> 
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.js"></script> 
<meta charset="utf-8"> 

     <style type="text/css"> 
     .ui-button { margin-left: -1px; } 
     .ui-button-icon-only .ui-button-text { padding: 0.35em; } 
     .ui-autocomplete-input { margin: 0; padding: 0.48em 0 0.47em 0.45em; } 
     </style> 

     <script type="text/javascript"> 


      function optionSelected(selectedValue) { 
       document.title = selectedValue; 
      } 

      (function ($) { 
       $.widget("ui.combobox", { 
        _create: function() { 
         var self = this, 
            select = this.element.hide(), 
            selected = select.children(":selected"), 
            value = selected.val() ? selected.text() : ""; 
         var input = this.input = $("<input>") 
            .insertAfter(select) 
            .val(value) 
            .autocomplete({ 
             delay: 0, 
             minLength: 0, 
             source: function (request, response) { 
              var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
              response(select.children("option").map(function() { 
               var text = $(this).text(); 
               if (this.value && (!request.term || matcher.test(text))) 
                return { 
                 label: text.replace(
                      new RegExp(
                        "(?![^&;]+;)(?!<[^<>]*)(" + 
                        $.ui.autocomplete.escapeRegex(request.term) + 
                        ")(?![^<>]*>)(?![^&;]+;)", "gi" 
                      ), "<strong>$1</strong>"), 
                 value: text, 
                 option: this 
                }; 
              })); 
             }, 
             select: function (event, ui) { 
              ui.item.option.selected = true; 
              self._trigger("selected", event, { 
               item: ui.item.option 
              }); 
              //JK 
              optionSelected(ui.item.option.value); 

             }, 
             change: function (event, ui) { 
              if (!ui.item) { 
               var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"), 
                   valid = false; 
               select.children("option").each(function() { 
                if ($(this).text().match(matcher)) { 
                 this.selected = valid = true; 
                 return false; 
                } 
               }); 
               if (!valid) { 
                // remove invalid value, as it didn't match anything 
                $(this).val(""); 
                select.val(""); 
                input.data("autocomplete").term = ""; 
                return false; 
               } 
              } 
             } 
            }) 
            .addClass("ui-widget ui-widget-content ui-corner-left"); 

         input.data("autocomplete")._renderItem = function (ul, item) { 
          return $("<li></li>") 
             .data("item.autocomplete", item) 
             .append("<a>" + item.label + "</a>") 
              .appendTo(ul); 
         }; 

         this.button = $("<button type='button'>&nbsp;</button>") 
            .attr("tabIndex", -1) 
            .attr("title", "Show All Items") 
            .insertAfter(input) 
            .button({ 
             icons: { 
              primary: "ui-icon-triangle-1-s" 
             }, 
             text: false 
            }) 
            .removeClass("ui-corner-all") 
            .addClass("ui-corner-right ui-button-icon") 
            .click(function() { 
             // close if already visible 
             if (input.autocomplete("widget").is(":visible")) { 
              input.autocomplete("close"); 
              return; 
             } 

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

        destroy: function() { 
         this.input.remove(); 
         this.button.remove(); 
         this.element.show(); 
         $.Widget.prototype.destroy.call(this); 
        } 
       }); 
      })(jQuery); 

      $(function() { 
       $("#<%= newEmpName.ClientID%>").combobox(); 
       $("#toggle").click(function() { 
        $("#<%= newEmpName.ClientID%>").toggle(); 
       }); 
      }); 
    </script> 




**Markup:** 

    <asp:DropDownList ID="newEmpName" OnSelectedIndexChanged="ddl_SelectedIndexChanged" runat="server" CssClass="style26" AutoPostBack="True" /> 
+0

질문입니다. 1. jquery 사용자 자동 완성 기능을 사용하고 있습니까? 2. 드롭 다운 목록을 텍스트 상자로 변경하여 자동 완성을 사용 하시겠습니까? – naveen

+0

아직도 올바른 포스트 백이 있습니까? 또한 컨트롤과 JS에 대한 마크 업을 게시 할 수 있습니까? – Geneb

+0

@Geneb, 문제가 있습니다. 더 이상 다시 게시하지 않습니다. Naveen, 자동 완성 기능; 그게 문제가 아니에요, 아니, 나는 텍스트 상자로 변경하지 않았지만 js의 일부입니다. js와 마크 업을 게시했습니다. 감사합니다. – Kenny

답변

0

, 선택된 인덱스는 더 이상 변경이 가능 대안의 목록이 변경되어 자동 완성으로, 항상 첫 번째입니다,하지만 인덱스 : 여기

은 JS 마크 업입니다 선택한 항목이 변경되지 않으면 항상 0입니다. 내용에 따라 일부 트리거를 사용해보십시오.

관련 문제