【发布时间】:2008-09-07 15:18:43
【问题描述】:
我想使用一个公开数据源属性的组件,但我不想为数据源提供整个对象列表,我只想使用简单的对象。有没有办法做到这一点?
提到的组件是 DevExpress.XtraDataLayout.DataLayoutControl - 不过这与问题无关。
【问题讨论】:
标签: .net data-binding
我想使用一个公开数据源属性的组件,但我不想为数据源提供整个对象列表,我只想使用简单的对象。有没有办法做到这一点?
提到的组件是 DevExpress.XtraDataLayout.DataLayoutControl - 不过这与问题无关。
【问题讨论】:
标签: .net data-binding
Databinding 需要一个 IEnumerable 对象,因为它像 foreach 循环一样枚举它。
所以要做到这一点,只需将您的单个对象包装在一个 IEnumerable 中。
即使这样也行:
DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
【讨论】:
DataBindObject.DataSource = new List<YourObject>(){ YourObjectInstance }; 可能更适合
List<T>.Add 返回void 而不是IEnumerable,因此该示例会导致编译时错误。
在 ASP.NET2.0 中,您可以使用泛型集合来制作这个单一对象 仅包含一个对象的列表,您可以将其数据绑定到任何服务器控件 使用对象数据源,例如
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
然而,我会考虑使用一个简单的数组而不是 List
T[] DataSourceHelper::ToVector(T 标量) { 返回新的 T[] { 标量 }; }
【讨论】:
我追求和你一样的东西。我发布了一个新问题Two-way databinding of a custom templated asp.net control,它有点领先。看看你能做些什么......
【讨论】:
在我的 formView 中使用它:
databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
【讨论】: