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
viewModelBindingSource
: avecDataSource = ViewModel
rowsBindingSource
: avecDataSource = viewModelBindingSource
ETDataMember = Rows
selectablesBindingSource
avecDataSource = viewModelBindingSource
ETDataMember = 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??
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
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème quelques jours en arrière, mais je n'ai pas trouvé de solution pour elle. Ce que j'ai compris c'est que les valeurs sont binidng à la colonne de la grille contenant ComboEdit ou LookupEdit doit correspondre à la Vlaue Membre de la valeur de la ComboEdit/LookUpEdit Collection.
Si elle se trouver correspondant à la valeur qu'il va montrer l'afficheur membre de la valeur dans la cellule, sinon la valeur de la cellule est vide.
C'est ce que j'ai reçu de mon expérience de travail.
Vous devez également vous assurer qu'il n'y a qu'un seul élément dans la collection liée qui a l'id que vous avez sélectionné, sinon l'entrée apparaîtra vide.
OriginalL'auteur Syeda
J'ai eu un problème similaire. Dans mon cas, le problème était dû à l'évolution de la propriété DataSource de repositoryItemLookupEdit dans la colonne.
Lors de la nouvelle source de données dans la ligne actuelle est plus restreint et n'est pas en mesure de montrer à d'autres ligne, les valeurs, les cellules dans ces lignes vide.
Pour résoudre ce problème,
Vous pouvez utiliser le ShownEditor événement et l'exemple de code dans le lien ci-dessous:
http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsBaseColumnView_ShownEditortopic
Le truc, c'est,
Au lieu de définir la source de données de repositoryItemLookupEdit, vous obtenez la vue.ActiveEditor comme un LookupEdit et définir sa source de données. Ensuite, les autres lignes ne sont pas affectés.
Voici un exemple de code:
OriginalL'auteur Veysel Özdemir
Ok, donc j'ai pensé qu'une partie. Je ne suis pas EXACTEMENT pourquoi, le contenu se vide. Mais il a à voir avec le fait que j'ai instancié de nouveaux objets qui peuplent la liste
newSelectables
.Je suppose que lorsque la cellule perd le focus, le XtraGrid tourne à l'origine repositoryItemLookUpEdit qui points à ViewModel.Options pour obtenir le DisplayValue de l'élément. Depuis l'élément sélectionné n'existe pas dans la liste originale de cet échec. Si je réutiliser les objets d'origine au lieu de clonage eux, il semble fonctionner.
OriginalL'auteur tyrone copex
Vous pouvez remplacer ce comportement par l'ajout d'un gestionnaire d'événement sur l'Éditeur associé à la zone de liste déroulante. par exemple
OriginalL'auteur Chui Tey
OriginalL'auteur LTN