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

提到的组件是 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 stalarar){返回新的t [] {scalar};}

我和你追求同样的事情。我发布了一个新问题 自定义模板化 ASP.NET 控件的双向数据绑定 那有一点领先。看看你能用它做什么...

在我的 formView 中使用它:

databoundControl.DataSource = new [] { singleObject };
databoundControl.DataBind();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top