3

我想使用一个公开数据源属性的组件,但我不想为数据源提供整个对象列表,我只想使用简单的对象。有没有办法做到这一点?

提到的组件是 DevExpress.XtraDataLayout.DataLayoutControl - 不过这与问题无关。

4

5 回答 5

8

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

所以要做到这一点,只需将您的单个对象包装在一个 IEnumerable 中。

即使这样也行:

DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
于 2008-09-07T15:19:44.707 回答
1

在 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>

来源

于 2008-09-07T15:23:07.053 回答
1

除了使用实现 IEnumerable<T> 的类之外,我认为您别无选择。即使 DataSource 属性足够智能以获取标量对象,它也可能会在内部将其转换为向量。

但是,我会考虑使用简单的数组而不是 List<T>,因为这将导致更少的内存分配。如果您不喜欢数组语法(也为了提高可读性),您可以使用辅助方法:

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

于 2008-09-07T17:20:49.690 回答
1

我追求和你一样的东西。我已经发布了一个新问题自定义模板化 asp.net 控件的双向数据绑定,该控件有点领先。看看你能做些什么......

于 2010-05-19T21:37:36.107 回答
0

在我的 formView 中使用它:

databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
于 2010-07-24T19:46:46.353 回答