我想使用一个公开数据源属性的组件,但是我想只使用简单的对象,而不是为数据源提供整个对象列表。有没有办法做到这一点?
上面提到的组件是DevExpress.XtraDataLayout.DataLayoutControl - 这与问题完全无关。
答案 0 :(得分:8)
Databinding需要一个IEnumerable对象,因为它就像foreach循环一样对它进行了充实。
所以要做到这一点,只需将您的单个对象包装在IEnumerable中。
即使这样也可行:
DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
答案 1 :(得分: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>
答案 2 :(得分:1)
除了使用实现IEnumerable&lt; T&gt;的类之外,我认为你没有太多选择。即使DataSource属性足够智能以获取标量对象,它也可能将其内部转换为向量。
然而,我会考虑使用简单的数组而不是List&lt; T&gt;因为这将导致更少的内存分配。如果您不喜欢数组语法(以及提高可读性),可以使用辅助方法:T [] DataSourceHelper :: ToVector(T标量){ return new T [] {scalar}; }
答案 3 :(得分:1)
我跟你做同样的事。我发布了一个新问题Two-way databinding of a custom templated asp.net control,它有一点领先优势。看看你能做些什么......
答案 4 :(得分:0)