2011-03-23 7 views
0

나는 이걸 가지고 내 머리카락을 꺼내입니다.UserControl DropDownList 컨텍스트 내에서 FinByValue가 작동하지 않습니다.

저는 Employee 드롭 다운 목록 usercontrol (uxEmployee)을 가지고 SelectedValue 메서드를 SelectedValue 속성으로 노출 시켰습니다.

내 페이지 내에서 내 데이터를 기반으로 값을 설정하거나 현재 값이없는 경우 값을 목록에 추가하려고합니다.

내가 무엇을 하든지 관계없이 설정 값을 목록에 추가합니다. 값이 이미 목록에있는 경우에도. 여전히 가치를 더하고 있습니다. 기본적으로 FindByValue는 내가하는 일과 관계없이 항상 "아무것도"반환하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

Public Property SelectedValue() As String 

    Get 
     Return uxEmployee.SelectedValue 
    End Get 

    Set(ByVal value As String) 

     If Not uxEmployee.Items.FindByValue(value) Is Nothing Then 
      uxEmployee.SelectedValue = value 
     Else 
      uxEmployee.Items.Insert(0, New ListItem(value, value)) 
      uxEmployee.AppendDataBoundItems = True 
      uxEmployee.DataBind() 
     End If 

    End Set 
End Property 

Public WriteOnly Property Department() As String 
    Set(ByVal value As String) 
     _department = value 
    End Set 
End Property 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not (IsPostBack) Then 
     Dim emp As New Employee() 

     With uxEmployee 
      If _department <> String.Empty Then 
       .DataSource = emp.GetByDept(_department) 
      Else 
       .DataSource = emp.GetList() 
      End If 
      .DataTextField = "FullName" 
      .DataValueField = "UserName" 
      .DataBind() 
     End With 
    End If 
End Sub 

내 호출 페이지는 페이지로드에 다음과 .. uxSalesleadv이 uxemployee

Dim objPrj As ServiceProject = New ServiceProject() 
     objPrj = objPrj.GetItem(prjID) 
     With objPrj 
      uxSalesLead.SelectedValue = .SalesLead 
      End With 
+0

처음 uxEmployee.Items를 어떻게 채우고 있습니까? –

+0

그냥 reguluar 비즈니스 개체 클래스에서 데이터 집합을 반환하는 내 GetList 함수. – jsam

+0

드롭 다운리스트 usercontrol의 SET 속성에서 getselectedvalue를 사용할 수 있습니까? 아무도 도와 줄 수 있습니까? – jsam

답변

0

방법은 정확히 일치를 수행하고 대소 문자 구분과 문화를 구분의 인스턴스 사용합니다. 값이 디버거에서 동일하다는 것을 확인 했습니까?

+0

Ive가 시도했지만 일반적인 "인덱스 된 속성을 평가하려면 해당 속성이 자격이 있어야합니다 .."라는 직원 컬렉션이 있습니다. 이걸 잃어 버렸어. Ive는 이것에 종사하는 하루 종일을 보냈다. 그리고 아직도 그것이 기능하지 않고 있는지 전혀 모른다. – jsam

0

FindByName()을 사용해보세요. 작동하는 경우 데이터 소스를 처음 설정할 때 값이 제대로 설정되지 않습니다.

+0

여전히 작동하지 않습니다. 나는 동일한 절차를 사용하여 findbyvalue를 테스트했지만 usercontrol이 아닌 ondage ddl을 사용하여 정상적으로 작동합니다. 그것은 그냥 작동하지 않는 usercontrol에 내가 왜 몰라요. – jsam

0

많은 시행 착오와 디버깅 후에 문제를 파악했습니다.

page_load에서 pre_render 이벤트로 데이터 할당을 이동할 때 컨트롤이 올바르게 작동하도록 할 수있었습니다. 그러나 이것은 이상적은 아니 었습니다. 나는 결국 실제 databinding이 일어나기 전에 usercontrol이 값을 설정하고 있음을 발견했습니다.

이제 로직을 내 Set 속성에서 제거하고 이전 컨트롤의 page_load databinding에 로직을 추가하여 이전 SET 값이 데이터 바인딩 목록에 있는지 확인합니다. isnt이면 항목을 추가합니다. 이렇게하면 추가 페이지 코드없이 목록 오류가 아닌 항목에 대해 걱정할 필요없이 앱 전체에서 usercontrol을 사용할 수 있습니다.

관련 문제