DevExpress LookupEdit - réglage sélectionné DataRow par code
Je suis conscient qu'il y a d'autres des questions comme ça, mais leurs solutions ne fonctionnent pas pour moi.
J'ai le code suivant:
lueSizes.Properties.DataSource = new BindingSource(PS.PaperSizes, null); lueSizes.Properties.Columns.Add(new LookUpColumnInfo("PaperName", "Größe")); lueSizes.Properties.DisplayMember = "PaperName"; lueSizes.Properties.ValueMember = "PaperName"; //PS is a regular System PrinterSettings object foreach (PaperSize size in PS.PaperSizes) //I confirmed with debugging that this actually happens correctly if (size.RawKind == binSettings.SizeRawKind) { lueSizes.EditValue = size; break; }
Remplissage de la LookupEdit avec la source de données fonctionne correctement, l'utilisateur peut sélectionner la taille de Papier dans la liste déroulante, et
lueSizes.GetSelectedDataRow() comme Papier
puis renvoie un format de Papier de l'objet comme prévu.
Le problème que j'ai est le réglage de la EditValue, il n'a tout simplement rien. J'ai vérifié que lors de l'exécution, la source de données contient tous les Papier des objets dans PS.PaperSizes, y compris celui qui se trouve dans la boucle foreach. Mais la mise en EditValue = taille n'est pas la cause de la ligne de données sélectionnée à jour en conséquence.
D'autres variations que j'ai essayé sont:
lueSizes.EditValue = taille.PaperName;
lueSizes.EditValue = lueSizes.Les propriétés.GetKeyValueByDisplayText(de la taille.PaperName);
lueSizes.EditValue = lueSizes.Les propriétés.GetKeyValueByDisplayValue(de la taille.PaperName);
lueSizes.EditValue = lueSizes.Les propriétés.GetKeyValueByDisplayValue(taille);
lueSizes.EditValue = 0;
Aucun de ces faire quoi que ce soit, sélectionnés datarow reste NULLE et n'affiche rien à l'utilisateur.
Quoi d'autre puis-je essayer de définir le DataRow par code?
Edit:
private void lueSizes_EditValueChanged(object sender, EventArgs e)
{
object o = lueSizes.EditValue;
object p = lueSizes.GetSelectedDataRow();
PaperSize size = o as PaperSize;
UpdateSize(size);
}
L'objet o est l'objet que j'ai défini plus haut, le format de Papier de la taille que j'ai constaté dans la boucle, mais de l'objet p est null.
non, parce que la source de données ne change pas après sa déclaration, et parce que LookupEdit n'a pas cette méthode en premier lieu.
OriginalL'auteur Hackworth | 2011-09-22
Vous devez vous connecter pour publier un commentaire.
Je pense que j'ai au moins trouvé une solution de contournement:
Alors d'abord, je laisse la boucle de recherche dans le BindingSource, qui-je définir explicitement maintenant, au lieu de la Printersettings objet.
Prochaine, je ne peut pas définir la propriété DisplayValue.
Enfin, j'évite d'avoir à chercher le DataRow et aller pour l'édition de la valeur directement. Ne sais pas quelles sont les limites
Je ne sais pas quoi d'autre que les pauses, si quoi que ce soit, mais pour l'instant il fonctionne.
OriginalL'auteur Hackworth
Vous avez à s'assurer que la valeur assignée est existe dans le lookupEdit de la source de données,
ensuite, essayez de définir la
.Text
propriété directementPour tirer le sous-jacent affecté objet
Le LookUpedit du changement de texte dans l'INTERFACE utilisateur?
Non, elle ne fait rien, comme je l'ai écrit. La ligne affichée à l'utilisateur reste "[EditValue est null]"
si le
EditValue is null
alors la valeur assignée n'existe pas dans la source de données d'origine!, en plus de la méthodeGetSelectedDataRow
existe pas dans leDevExpress.XtraEditors.LookUpEdit
méthodes! Quelle est la version de DevExpress vous utilise? de toute façon vérifier mon post pour plus de mises à jourJe suis à l'aide de 10.2.8, le GetSelectedDataRow (): documentation.devexpress.com/#WindowsForms/... j'ai vérifié la source de données lors de l'exécution, il ne contient pas tous les le Papier les objets dans PS.PaperSizes, y compris celui qui se trouve dans la boucle foreach. Je ne sais pas pourquoi il n'est pas accepté comme l'EditValue
OriginalL'auteur Rami Shareef
Je sais que c'est un vieux thread mais j'ai juste eu le même problème. L'on a accepté la réponse n'est pas la meilleure pratique puisque notre but est d'obtenir l'objet sélectionné plutôt que la valeur de la clé. La solution de contournement consiste à appeler lookupEdit.Les propriétés.ForceInitialize() juste après EditValueChangedEvent ont été licenciés et GetSelectedDataRow() doit travailler par la suite. Ce résoudre le problème si le lookupEdit n'est pas modifié via la souris.
OriginalL'auteur ricky888