データソース プロパティを公開するコンポーネントを使用したいのですが、オブジェクトのリスト全体をデータソースに提供する代わりに、単純なオブジェクトのみを使用したいと考えています。これを行う方法はありますか?
言及されたコンポーネントは DevExpress.XtraDataLayout.DataLayoutControl ですが、これは質問とはまったく関係ありません。
データソース プロパティを公開するコンポーネントを使用したいのですが、オブジェクトのリスト全体をデータソースに提供する代わりに、単純なオブジェクトのみを使用したいと考えています。これを行う方法はありますか?
言及されたコンポーネントは DevExpress.XtraDataLayout.DataLayoutControl ですが、これは質問とはまったく関係ありません。
foreach ループと同じように列挙するため、データバインディングは IEnumerable オブジェクトを想定しています。
これを行うには、単一のオブジェクトを IEnumerable でラップするだけです。
これでもうまくいきます:
DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
私はあなたと同じことを求めています。私は新しい質問を投稿しました カスタムテンプレート化されたasp.netコントロールの双方向データバインディングは、少しリードしています。あなたがそれを作ることができるかを見てください...
ASP.NET2.0 では、ジェネリック コレクションを使用して、この単一のオブジェクトをその中の 1 つのオブジェクトのみのリストにし、objectdatasource を使用して任意のサーバー コントロールにデータバインドできます。
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);
次に、ObjectDataSource は次のようになります。
<asp:ObjectDataSource ID="odsDL" runat="server"
SelectMethod="OrdersByCustomer"
TypeName="YourBLL.UtiltiesClassName"
DataObjectTypeName="clsScannedDriverLicense">
</asp:ObjectDataSource>
IEnumerable<T> を実装するクラスを使用する以外に選択肢はないと思います。DataSource プロパティがスカラー オブジェクトを取得できるほどスマートであったとしても、内部でベクターに変換される可能性があります。
ただし、メモリ割り当てが少なくなるため、 List<T> ではなく単純な配列を使用することを検討します。配列構文が気に入らない場合 (および読みやすさを向上させるため) は、ヘルパー メソッドを使用できます。
T[] DataSourceHelper::ToVector(T scalar) { return new T[] { scalar }; }
私のformViewでこれを使用する:
databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();