如何在.NET中对单个对象进行数据绑定?

时间:2020-03-05 18:49:00  来源:igfitidea点击:

我想使用一个公开数据源属性的组件,但我不想只为简单的对象提供数据源,而是向其提供对象的整个列表。有什么办法吗?

提到的组件是DevExpress.XtraDataLayout.DataLayoutControl,但这与问题完全无关。

解决方案

回答

数据绑定期望一个IEnumerable对象,因为它像foreach循环一样枚举它。

因此,只需将单个对象包装在IEnumerable中即可。

即使这将工作:

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

回答

在ASP.NET2.0中,我们可以使用通用集合来使这个单个对象成为可能。
我们可以将其绑定到任何服务器控件的仅一个对象的列表
使用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标量){
返回新的T [] {标量};
}

回答

我跟你一样我发布了一个新问题,即自定义模板化asp.net控件的双向数据绑定,该控件具有领先优势。看看你能做什么...

回答

在我的formView中使用它:

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