2017-03-19 32 views
0

autocompleteテキストボックスを使用しており、Webサービスのasmxファイルからデータを取得しようとしています。私はデータを取得していますが、同じデータが繰り返されています。私は何が起こっているのか分かりません。ここに私のaspxファイルされる:多値オートコンプリートのWebサービスからJsonデータを取得する

enter image description here

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Emp_Autocomplete.aspx.cs" MasterPageFile="~/Site.Master" Inherits="AutoCompleteText.Emp_Autocomplete" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 

    <script language="javascript" type="text/javascript"> 
     $(function() { 
       $('#<%=txtManagerName.ClientID%>').autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: "ManagerService.asmx/Get_Employees", 
         data: "{ 'Condition':'" + request.term + "'}", 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         success: function (data) { 
          response($.map(data.d, function (item) { 
           return { 
            Name: data.d.Name, 
            EmployeeID: data.d.EmployeeID, 
            DOB: data.d.DOB, 
            json: data 
           } 
          })) 
         }, 
         error: function (XMLHttpRequest, textStatus, errorThrown) { 
          alert(textStatus); 
         } 
        }); 
       }, 
       focus: function (event, ui) { 
        $('#<%=txtManagerName.ClientID%>').val(ui.item.Name); 
        return false; 
       }, 
       select: function (event, ui) { 
        $('#<%=txtManagerName.ClientID%>').val(ui.item.Name); 
        return false; 
       }, 
      }).data("ui-autocomplete")._renderItem = function (ul, item) { 
       return $("<li>") 
       .append("<a><bold>Name:" + item.Name + "</bold><br>EmployeeID: " + item.EmployeeID + "<br>DOB: " + item.DOB + "</a>") 
       .appendTo(ul); 
      }; 
     }); 
    </script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<h3>Multival autocomplete</h3> 
    <div> 
      <asp:TextBox ID="txtManagerName" runat="server"></asp:TextBox> 
    <div> 
     <div><b>Name:</b> <asp:Label ID="lblName" runat="server"></asp:Label></div> 
     <div><b>EmployeeID:</b> <asp:Label ID="lblEmployeeID" runat="server"></asp:Label></div> 
     <div><b>DOB:</b> <asp:Label ID="lblDOB" runat="server"></asp:Label></div> 
    </div> 
    </div> 
</asp:Content> 

ここでは、ASMXファイルです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Script.Services; 
using System.Web.Services; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace AutoCompleteText 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [System.Web.Script.Services.ScriptService] 
    public class ManagerService : System.Web.Services.WebService 
    { 
     public class Employee 
     { 
      public string Name; 
      public string EmployeeID; 
      public string DOB; 
     } 
     [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public Employee Get_Employees(string Condition) 
     { 
      Employee objEmployee = new Employee(); 
      using (SqlConnection con = new SqlConnection(DataAccess.DataConnection.MyConnection.StrConn)) 
      { 
       SqlCommand cmd = new SqlCommand("dbo.SEL_Employee_Info", con); 
       cmd.CommandType = CommandType.StoredProcedure; 
       SqlParameter parameter = new SqlParameter("@Condition", Condition); 
       cmd.Parameters.Add(parameter); 
       con.Open(); 
       SqlDataReader rdr = cmd.ExecuteReader(); 
       while (rdr.Read()) 
       { 
        objEmployee.Name = rdr["Name"].ToString(); 
        objEmployee.EmployeeID = rdr["EmployeeID"].ToString(); 
        objEmployee.DOB = rdr["DOB"].ToString(); 
       } 
       rdr.Close(); 
       con.Close(); 
      } 
      return objEmployee; 
     } 
    } 
} 

私は77を言う入力したとき、私はすべての従業員を取得する必要があることを表示するために画像を追加しました格納されたプロクシからDOBに77がある

storedproc results

しかし、私は最後の従業員だけを取得しています。なぜそれが分かりませんか?マイクロソフトの勧告としてdata retrieved

+0

textBoxがアルファベットと数値の両方を扱うようにしますか? –

+0

@Adeelレコードセットをループする際に、値を正しく取得しています。最後のレコードのみが複数回表示されます。私は保存されたproc結果を表示するためにpngファイルを添付しようとしましたが、表示されているものの、アップロードされなかったようです。 – SilverFish

答えて

0

、それはIDataRecordSqlDataReaderのをキャストするために提供していますので、以下のコードを試してみて、それが役立つかどうかを確認?

while (rdr.Read()) 
{ 
    objEmployee.Name = (IDataRecord)rdr[0].ToString(); 
    objEmployee.EmployeeID = (IDataRecord)rdr[1].ToString(); 
    objEmployee.DOB = (IDataRecord)rdr[2].ToString(); 
} 

問題はあなたのストアドプロシージャにある可能性があります。あなたのSPファイルを表示できますか?

+0

保存されたprocは正常に動作しているようです。ここでは、コードは次のとおり – SilverFish

+0

'code' はPROCEDURE [DBO]をCREATE [SEL_Employee_Info] @Condition AS CALLER がSET NOCOUNT ONを開始すると、[VARCHAR(50) WITH EXECUTE;。 dbo.employees((社員LIKE '%' + @Condition + '%')OR (名前LIKE '%' + @Condition +「%の社員 、名前 、DOB TOP 10を選択')または (DOB LIKE'% '+ @条件+'% ')) END 'code' – SilverFish

関連する問題