LookupEdit dans XtraGrid valeur de la cellule se vide

C'est ce que j'ai:

public class ViewModel
{
    public BindingList<Row> Rows { get; set; }
    public BindingList<MyElement> Selectables { get; set; }
}

public class Row
{
    public MyElement Selected { get; set; }
}

public class MyElement
{
    public string Value { get; set; }
    public string Friendly { get; set; }
}

C'est ce que je veux:
Un XtraGrid avec une colonne qui a une zone de liste déroulante de l'éditeur dans chaque cellule. Les valeurs de la liste déroulante options sont différentes pour les différentes lignes. Plus précisément les options disponibles sont les sous-ensembles de ViewModel.Selectables, le sous-ensemble est défini par businessrules au moment de l'exécution.

C'est la façon dont j'essaie de faire ceci se produire:

J'ai créer trois BindingSources

  1. viewModelBindingSource: avec DataSource = ViewModel
  2. rowsBindingSource: avec DataSource = viewModelBindingSource ET DataMember = Rows
  3. selectablesBindingSource avec DataSource = viewModelBindingSource ET DataMember = Selectables

J'ai mis la grille de l' DataSource à rowsBindingSource.
J'ai créer un Éditeur de Référentiel pour une LookupEdit dans la grille.
J'ai mis le repositoryItemLookUpEdit's DataSource à selecteablesBindingSource
J'ai mis le repositoryItemLookUpEdit comme le ColumnEdit valeur de la colonne

Je crochet jusqu'à gridViews ShownEditor événement:

this.gridView1.ShownEditor += gridView1_ShownEditor;

Dans gridView1_ShownEditor(object sender, EventArgs e) méthode je peux alors avoir une référence à la vue afin que je puisse faire quelque chose comme ceci:

GridView view = sender as GridView;
var newSelectables = new BindingList<MyElement>();
//businesslogic to populate newSelectables ...
var bs = new BindingSource(newSelectables, "");
edit = (LookUpEdit)view.ActiveEditor;
edit.Properties.DataSource = bs;

Cela fonctionne dans la mesure que je reçois les nouvelles options dans le cliqué sur zone de liste déroulante et en sélectionnant l'option définit la valeur de l'objet lié, c'est-à Row.Selected.

Et maintenant à mon problème, lorsque la cellule perd le focus, le contenu de la cellule tourne à vide.

Cela semble être la conséquence d'une certaine manière par le fait que je créer un nouveau BindingSource à nouveau, parce que si je omettre ce changement de DataSource ensuite les valeurs dans ViewModel.Selectables sont utilisés à la place, et il fonctionne comme prévu.

Donc, personne ne sait pourquoi le texte affiché dans la cellule se vide après, il en perd le focus dans ce cas??

Avez-vous lié en rien les grilles de la source de données? Vous devez disposer d'une source de données lors de l'ajout de données à une grille sinon c'blancs. Vous pouvez pré-initialiser dans le InitNewRow événement.
oui comme je le décris, j'ai mis les grilles de la source de données pour le BindingSource rowsBindingSource, qui est lié à des Lignes dans le ViewModel de la classe. La grille n'est pas vide.

OriginalL'auteur tyrone copex | 2011-09-25