2010-02-05 3 views
2

Je m'arrache les cheveux pour ce problème incroyable.Comportement DevExpress LookUpEdit

Je liant 2 LookUpEdit de code:

  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"; 

Le premier problème est: Modification de la valeur sur l'un des deux LookUps ne reflètent pas changer l'autre! Mais im utilisant le même BindingSource, n'est pas la même position?

Un autre est: Ils remplissent automatiquement les colonnes, je ne veux pas montrer toutes les colonnes, j'ai essayé de supprimer, colonne d'exception non trouvé, si j'ajoute, je reçois des colonnes en double! Je ne comprends pas !!!

Répondre

1

La modification de EditValue de LookupEdit n'est pas directement liée à la position BindingSource.Current.

Vous devez utiliser quelque chose comme

lookUpEdit1.Properties.GetDataSourceRowByKeyValue(lookUpEdit1.EditValue) 

Si vous voulez que les deux LookupEdits liés vous êtes probablement mieux de partir de la valeur d'édition de l'un quand l'autre est changé.

Deuxièmement, vous devriez être en mesure d'effacer la liste des colonnes comme ceci:

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

tout doit se passer manuellement en cas de code. Merci de répondre. –

+0

Eh bien, les colonnes ne devraient être que celles que vous spécifiez, le Clear() est seulement là parce que vous avez dit que vous obteniez des doubles. Normalement, le comportement que je vois est qu'il montre toutes les colonnes si vous spécifiez none et seulement celles qui sont spécifiées lorsque vous les définissez. – csjohnst

1

Comme l'a dit ici

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

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

LookupEdit ne met à jour l'actuelle propriété du BindingSource.

Nous utilisons le code suivant comme une solution de contournement:

/// <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

Merci pour le point. –