2008-09-07 6 views
3

Ich möchte eine Komponente verwenden, die die Datenquelleneigenschaft verfügbar macht, aber anstatt die Datenquelle mit der vollständigen Liste der Objekte zu versorgen, möchte ich nur einfache Objekte verwenden. Gibt es eine Möglichkeit, dies zu tun?Wie können Sie ein einzelnes Objekt in .NET einbinden?

Die erwähnte Komponente ist DevExpress.XtraDataLayout.DataLayoutControl - das ist für die Frage jedoch ziemlich irrelevant.

Antwort

8

Databinding erwartet ein IEnumerable-Objekt, da es genau wie eine foreach-Schleife über es aufschließt.

Um dies zu tun, wickeln Sie einfach Ihr einzelnes Objekt in einem IEnumerable.

Auch dies funktionieren würde:

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

Oder 'DataBindObject.DataSource = new List () {} YourObjectInstance;' könnte –

+1

besser passen 'Liste . Add 'return' void' ist kein 'IEnumerable', daher würde das Beispiel zu einem Kompilierzeitfehler führen. –

1

In ASP.NET2.0 können Sie die generischen Auflistungen verwenden dieses einzelne Objekt in ihm eine Liste nur ein Objekt zu machen, die Sie zu jedem Server-Steuerelement Databind können mit der objectdatasource, z

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

Dann würde Ihr Object so aussehen:

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

Source

+0

Eine Randnotiz, aber Leute verwenden wirklich ObjectDataSource? Ich habe nie eine Anwendung außerhalb von MS-Beispielen gesehen ... Es ist so hässlich. – FlySwat

+0

Die ObjectDataSource war ein Copy & Paste aus der angegebenen Quelle. Ich habe es fast nie in der Wildnis gesehen. – Espo

1

Ich glaube nicht, dass Sie viel Auswahl haben andere als eine Klasse verwenden, die > IEnumerable < T implementiert. Selbst wenn die DataSource-Eigenschaft intelligent genug wäre, um ein skalares Objekt zu übernehmen, würde sie es wahrscheinlich intern in einen Vektor konvertieren.

Ich würde jedoch in Betracht ziehen, ein einfaches Array anstelle einer Liste <T> zu verwenden, da dies zu weniger Speicherzuweisungen führen wird. Wenn Ihnen die Array-Syntax nicht gefällt (und auch die Lesbarkeit erhöht wird), können Sie eine Hilfsmethode verwenden:

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

0

Verwendung in meinem Formuaransicht:

databoundControl.DataSource = new [] { singleObject }; 
databoundControl.DataBind();