2010-02-05 14 views
2

나는이 놀라운 문제 때문에 제 머리털을 찢고 있습니다.DevExpress LookUpEdit 동작

나는 코드에서 2 LookUpEdit 바인딩 해요 :

  MyBinding.DataSource = typeof(MyObject); 
     MyBinding.DataSource = _dataObject.GetMyList(); 

     firstLookUp.DataBindings.Add("EditValue", MyBinding, "Code"); 
     firstLookUp.Properties.DataSource = MyBinding; 
     firstLookUp.Properties.ValueMember = "Code"; 
     firstLookUp.Properties.DisplayMember = "Code"; 

     secondLookUp.DataBindings.Add("EditValue", MyBinding, "Info"); 
     secondLookUp.Properties.DataSource = MyBinding; 
     secondLookUp.Properties.ValueMember = "Info"; 
     secondLookUp.Properties.DisplayMember = "Info"; 

먼저 문제가되는 : 다른 하나를 변경 반영하지 두 조회 중 하나의 값을 변경! 그러나 동일한 BindingSource를 사용하여, 동일한 위치가 아닌가요?

또 다른 한 가지는 다음과 같습니다. 둘 다 자동으로 열을 채 웁니다. 제거하려고 시도한 모든 열을 표시하려고합니다. 예외 열을 찾을 수 없습니다. 추가하면 열이 중복됩니다! 나는 그것을 얻지 않는다 !!!

답변

1

LookupEdit의 EditValue 변경은 BindingSource.Current 위치에 직접 바인딩되지 않습니다.

당신은 당신이 모두 LookupEdits 당신은 아마 다른이 변경 될 때 하나의 편집 값을 설정하는 것이 더 낫다 연결하려면

lookUpEdit1.Properties.GetDataSourceRowByKeyValue(lookUpEdit1.EditValue) 

같은 것을 사용해야합니다. 둘째

당신과 같이 열 목록을 취소 할 수 있어야한다는 :

lookUpEdit1.Properties.Columns.Clear(); 
lookUpEdit1.Properties.Columns.Add(new LookUpColumnInfo("FirstName")); 
+0

그래서 모든 코드 이벤트에서 수동으로 발생한다. 대답은 고맙습니다. –

+0

글쎄, 당신이 지정하는 것들만 열이 있어야한다. Clear()는 두배 올랐다고 말했기 때문에 거기에만있다. 일반적으로 내가 본 동작은 none을 지정하면 모든 열을 표시하고 설정하면 지정된 열만 표시합니다. – csjohnst

1

으로는

http://www.devexpress.com/Support/Center/p/A2275.aspx

LookupEdit이의 현재 속성을 업데이트 않습니다

http://www.devexpress.com/Support/Center/p/B138420.aspx

여기 말했다 BindingSource.

우리는 해결 방법으로 다음 코드를 사용하여

/// <summary> 
/// Wrapper around DevExpress.XtraEditors.LookUpEdit to fix bug with adjusting the BindingSources Current Position 
/// </summary> 
public sealed class LookUpEditWithDataSource : LookUpEdit 
{ 
    private bool firstCall = true; 

    /// <summary> 
    /// Called when the edit value changes. 
    /// </summary> 
    protected override void OnEditValueChanged() 
    { 
     base.OnEditValueChanged(); 

     if (this.Properties.DataSource == null) 
     { 
      return; 
     } 

     if (this.BindingContext == null) 
     { 
      return; 
     } 

     if (this.firstCall) 
     { 
      this.firstCall = false; 

      // HACK 
      // starting and selecting the first item 
      // doesn't work so we change the position to the first item 
      this.BindingContext[this.Properties.DataSource].Position = 1; 
     } 

     this.BindingContext[this.Properties.DataSource].Position = this.Properties.GetDataSourceRowIndex(this.Properties.ValueMember, this.EditValue); 
    } 
} 
+0

감사합니다. –