是否可以将IEnumerable列表转换为BindingList集合?
IEnumerable列表是类型化对象的列表,例如:
IEnumerable<AccountInfo> accounts = bll.GetAccounts(u.UserName, u.Password);
我的PagingList只扩展了BindingList:
public class PagingList<T>
{
public BindingList<T> Collection { get; set; }
public int Count { get; set; }
public PagingList()
{
Collection = new BindingList<T>();
Count = 0;
}
}
我只想将我的IEnumerable列表传递给一个使用我的PagingControl呈现列表的方法:
protected void RenderListingsRows(PagingList<AccountInfo> list)
{
foreach (var item in list)
{
//render stuff
}
}
但似乎我不能在两者之间施展,有人能指出我所缺少的东西吗?!
非常感谢
本
答案 0 :(得分:4)
BindingList<T>
实现IEnumerable<T>
,但并非所有IEnumerable<T>
都是绑定列表(事实上,大部分都不是)。
您应该能够创建一个新的BindingList并在可枚举实例中添加项目。
答案 1 :(得分:2)
只是要指出,你的PagingList不会扩展BindingList,它会通过合成使用它。
我遇到了这个,寻找类似的答案。这里的答案似乎都没有为你的问题提供一个明确的解决方案,尽管他们在提出问题时提到了有价值的观点。我以为我会为路过的人添加一个。
因此,鉴于所提供的信息,简单的答案是否定的,但是如果不重构您的课程,您需要的简单解决方案就是:
IEnumerable<AccountInfo> accounts= bll.GetAccounts(u.UserName, u.Password);
myPagingList.Collection = new BindingList<Foo>(myfoos.ToList());
因此,您必须将您的AccountInfo项目物理添加到BindingList实例属性&#39; Collection&#39;。
答案 2 :(得分:1)
将PagingList传递给RenderListingsRows,它不会实现IEnumerable。
通常,为了使PagingList成为BindingList的扩展,它必须实现BindingList实现的所有接口。但目前它没有实现任何一个。
你应该从BindingList继承PagingList,或者实现所有这些接口,即使只是通过调用Collection对象的方法。
或者,你可以简单地写一下(list.Collection中的var项目)
答案 3 :(得分:0)
如果您的帐户集合实现了IList&lt; AccountInfo&gt;你应该能够做到这一点:
PagedList<AccountInfo> paged = new PagedList<AccountInfo>();
paged.Collection = new BindingList<AccountInfo>((IList<AccountInfo>)accounts);
答案 4 :(得分:0)
将绑定列表发送到RenderListingsRows而不是分页列表。 PagingList不会扩展BindingList,而是使用composision。因此问题。
以下示例。
public class PagingList<T>
{
public BindingList<T> Collection { get; set; }
public int Count { get; set; }
public PagingList()
{
Collection = new BindingList<T>();
Count = 0;
}
}
public void CallRenderListingsRows()
{
var pagingList = new PagingList<PostcodeDetail>();
RenderListingsRows(pagingList.Collection);
}
protected void RenderListingsRows(BindingList<PostcodeDetail> list)
{
foreach (var item in list)
{
//render stuff
}
}