2010-02-05 7 views
2

Я отрываю волосы от этой удивительной проблемы.DevExpress LookUpEdit Behavior

Я связывание 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"; 

Первой проблемы: Изменение значения на одном из два Lookups не отражающих изменений другой! Но им, используя тот же BindingSource, не та же позиция?

Другой: они оба заполняют автоматически столбцы, я не хочу показывать все столбцы, пытался удалить, столбец исключений не найден, если я добавляю, я получаю повторяющиеся столбцы! Я не понимаю!

ответ

1

Изменение EditValue LookupEdit напрямую не привязано к позиции BindingSource.Current.

Вы должны использовать что-то вроде

lookUpEdit1.Properties.GetDataSourceRowByKeyValue(lookUpEdit1.EditValue) 

Если вы хотите, чтобы оба LookupEdits связаны вы, вероятно, лучше настройки редактирования значения одного, когда другой изменяется.

Во-вторых Вы должны быть в состоянии очистить список столбцов, как так:

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

Так что все должно происходить вручную в случае кода. Thanx для ответа. –

+0

Ну, столбцы должны быть только теми, которые вы указали, Clear() только там, потому что вы сказали, что получаете двойные взлеты. Обычно поведение, которое я вижу, это отображать все столбцы, если вы укажете none и только указанные, когда вы их установили. – csjohnst

1

Как сказал здесь

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

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

LookupEdit делает обновление текущей собственности 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

Благодарим вас за точку. –

Смежные вопросы