Domanda

Vorrei utilizzare un componente che espone la proprietà datasource, ma invece di fornire il datasource con tutta la lista di oggetti, vorrei utilizzare solo semplice oggetto.C'è un modo per fare questo ?

La citata componente è DevExpress.XtraDataLayout.DataLayoutControl - questo è abbastanza irrilevante per la questione però.

È stato utile?

Soluzione

Databinding si aspetta un oggetto IEnumerable, perché enumorates su di esso come un loop foreach fa.

Quindi per fare questo, basta avvolgere il singolo oggetto in un oggetto IEnumerable.

Anche questo dovrebbe funzionare:

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

Altri suggerimenti

In ASP.NET2.0 è possibile utilizzare il generico collezioni per rendere questo oggetto unico un elenco di un solo oggetto che si può databind a qualsiasi server di controllo utilizzando l'objectdatasource, ad es.

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

Quindi il tuo ObjectDataSource vorresti essere simile a questo:

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

Fonte

Non credo di avere molta scelta, oltre che utilizzare una classe che implementa l'interfaccia IEnumerable<T>.Anche se la proprietà DataSource era abbastanza intelligente per prendere uno scalare oggetto, sarebbe probabilmente la conversione internamente per un vettore.

Desidero, tuttavia, considerare l'utilizzo di un semplice array piuttosto che un Elenco<T> come questo si tradurrà in un minor numero di allocazioni di memoria.Se non ti piace la sintassi degli array (e anche per aumentare la leggibilità), è possibile utilizzare un metodo di supporto:

T[] DataSourceHelper::ToVector(T scalare) { return new T[] { scalare };}

Io sono dopo la stessa cosa è.Ho postato una nuova domanda A due vie databinding di una custom basata su modelli asp.net controllo che ha un po ' di piombo.Vedere cosa si può fare...

Utilizzando questo nel mio formView:

databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top