DevExpress LookUpEdit Поведение - PullRequest
       18

DevExpress LookUpEdit Поведение

2 голосов
/ 05 февраля 2010

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

Я связываю 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, разве позиция не такая же?

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

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

Как сказано здесь

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);
    }
}
1 голос
/ 22 февраля 2010

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

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

lookUpEdit1.Properties.GetDataSourceRowByKeyValue(lookUpEdit1.EditValue)

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

Во-вторых, вы должны очистить список столбцов следующим образом:

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