2013-07-03 4 views
0

하나의 서비스로 Combobox 상점 값을 채 웁니다. Ajax 요청을 사용하여 다음 코드를 사용하여 자동으로 일치하는 텍스트를 표시합니다 (필터링). 내가 콤보 상자에서 어떤 이름을 선택하면 내가 EmplyeeNameComboBox가 Ext.net에서 "Value"를 표시하는 대신 "DisplayText"를 표시하지 않습니다.

을 보여주는뿐만 아니라 직원 ID (값)를 보여주는 코드 그것을 를 사용하여 콤보 상자에 값을 기입 할 때

<ext:ComboBox ID="cbManager" runat="server" DisplayField="FirstName" 
         LabelAlign="Right" ValueField="EmployeeID" AllowBlank="false" 
               HideTrigger="true" MinChars="1" FieldLabel="* Manager" > 
       <ext:Store ID="storeManager" runat="server" AutoLoad="false"> 
        <Proxy> 
        <ext:AjaxProxy Url="~/Modules/eHRMS/FilterEmployeeNames.ashx?empType=1"> 
        <ActionMethods Read="GET" /> 
         <Reader> 
        <ext:JsonReader Root="employees" TotalProperty="total" /> 
         </Reader> 
        </ext:AjaxProxy> 
        </Proxy> 
        <Model> 
        <ext:Model ID="Model4" runat="server"> 
        <Fields> 
        <ext:ModelField Name="EmployeeID" /> 
        <ext:ModelField Name="FirstName" /> 
        </Fields> 
        </ext:Model> 
        </Model> 
       </ext:Store> 
       </Store> 
     </ext:ComboBox> 

, 그것은 올바른 값을주고 있지만

나는 f CodeBehind에서 ollowing 코드

직원 emp = GetProject (EmployeeID); cbManager.SetValue (project.ManagerID);

I have also tried the following one also 
cbManager.Select(project.ManagerID.ToString()); 

하지만 그것은 단지이 문제에 대한 이유가 될 수 무엇 대신 문자열 (즉 EmployeeName)

의 int 값을 보여 나에게 올바른 방법을 제안 해주십시오.

감사합니다

답변

1
당신은이 값에 해당하는 레코드를 추가하고 값을 설정해야합니다

: 내가 바인딩하고 그래서 내가, 핸들러 서비스를 사용하고 Questioin에서 언급 한 바와 같이 여기

<%@ Page Language="C#" %> 

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %> 

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!X.IsAjaxRequest) 
     { 
      Store store = this.ComboBox1.GetStore(); 
      store.Data = new object[] 
      { 
       new 
       { 
        value = "2", 
        text = "Item 2" 
       } 
      }; 
     } 
    } 

    protected void Store_OnReadData(object sender, StoreReadDataEventArgs e) 
    { 
     Store store = sender as Store; 
     store.DataSource = new object[] 
     { 
      new { value = "1", text = "Item 1" }, 
      new { value = "2", text = "Item 2" }, 
      new { value = "3", text = "Item 3" } 
     }; 
     store.DataBind(); 
    } 

    protected void ButtonClick(object sender, DirectEventArgs e) 
    { 
     ComboBox1.GetStore().Add(new object[] 
     { 
      new 
      { 
       value = "4", 
       text = "Item 4" 
      } 
     }); 
     ComboBox1.SetValue("4"); 
    } 
</script> 

<!DOCTYPE html> 

<html> 
<head runat="server"> 
    <title>Ext.NET v2 Example</title> 
</head> 
<body> 
    <form runat="server"> 
     <ext:ResourceManager runat="server" /> 
     <ext:ComboBox 
      ID="ComboBox1" 
      runat="server" 
      DisplayField="text" 
      ValueField="value"> 
      <Store> 
       <ext:Store runat="server" OnReadData="Store_OnReadData"> 
        <Model> 
         <ext:Model runat="server"> 
          <Fields> 
           <ext:ModelField Name="value" /> 
           <ext:ModelField Name="text" /> 
          </Fields> 
         </ext:Model> 
        </Model> 
        <Proxy> 
         <ext:PageProxy> 
          <Reader> 
           <ext:JsonReader /> 
          </Reader> 
         </ext:PageProxy> 
        </Proxy> 
       </ext:Store> 
      </Store> 
      <SelectedItems> 
       <ext:ListItem Index="0" /> 
      </SelectedItems> 
     </ext:ComboBox> 

     <ext:Button runat="server" Text="Set some value"> 
      <DirectEvents> 
       <Click OnEvent="ButtonClick"></Click> 
      </DirectEvents> 
     </ext:Button> 
    </form> 
</body> 
</html> 
+0

을 그것을 통해, 나는 당신이 말한 것처럼 아이템 목록을 추가함으로써 데이터를 직접 바인딩해야만합니까? –

+0

여기에 표시 할 500 개 이상의 레코드가 있습니다. 사용자 페이지 프록시가 모든 레코드를 표시하고 필터링 기능을 사용할 수 없기 때문에 서비스 기능을 사용합니다. –

+0

로직이 동일해야합니다. 데이터를로드하는 방법에 실제로 의존하지 않습니다. 이 문제가 계속 발생하면 샘플을 제공 할 수 있습니까? – Baidaly