Question

Je voudrais utiliser un composant qui expose la propriété de la source de données, mais au lieu de fournir à la source de données une liste complète d'objets, je voudrais utiliser uniquement un objet simple.Est-ce qu'il y a un moyen de faire ça ?

Le composant mentionné est DevExpress.XtraDataLayout.DataLayoutControl - cela n'a cependant aucun rapport avec la question.

Était-ce utile?

La solution

Databinding attend un objet IEnumerable, car il l'énumère comme le fait une boucle foreach.

Donc, pour ce faire, enveloppez simplement votre objet unique dans un IEnumerable.

Même ceci fonctionnerait :

DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);

Autres conseils

Dans ASP.NET2.0, vous pouvez utiliser les collections génériques pour faire de cet objet unique une liste d'un seul objet en lui que vous pouvez dresser un contrôle sur n'importe quel contrôle de serveur à l'aide de l'objetDataSource, par exemple

List<clsScannedDriverLicense> DriverLicenses = new
List<clsScannedDriverLicense>();
//this creates a generic collection for you that you can return from
//your BLL to the ObjectDataSource
DriverLicenses.Add(TheOneObjectThatYouHaveofType_c lsDriverLicense);

Votre ObjectDataSource ressemblerait alors à ceci :

<asp:ObjectDataSource ID="odsDL" runat="server"
SelectMethod="OrdersByCustomer"
TypeName="YourBLL.UtiltiesClassName"
DataObjectTypeName="clsScannedDriverLicense">
</asp:ObjectDataSource>

Source

Je ne pense pas que vous ayez d'autre choix que d'utiliser une classe qui implémente IEnumerable<T>.Même si la propriété DataSource était suffisamment intelligente pour prendre un objet scalaire, elle le convertirait probablement en interne en vecteur.

J'envisagerais cependant d'utiliser un simple tableau plutôt qu'un List<T> car cela entraînerait moins d'allocations de mémoire.Si vous n'aimez pas la syntaxe du tableau (et aussi pour augmenter la lisibilité), vous pouvez utiliser une méthode d'assistance :

T [] dataSourceHelper :: tovector (t scalar) {return new t [] {scalar};}

Je recherche la même chose que toi.J'ai posté une nouvelle question Liaison de données bidirectionnelle d'un contrôle asp.net basé sur un modèle personnalisé ça a un peu d'avance.Voyez ce que vous pouvez en faire...

En utilisant ceci dans mon formView :

databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top