如何在.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();