为什么我不能将IEnumerable <t>列表转换为BindingList <t>?</t> </t>

时间:2009-07-01 16:28:10

标签: c# ienumerable bindinglist

是否可以将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
     }
   }

但似乎我不能在两者之间施展,有人能指出我所缺少的东西吗?!

非常感谢

5 个答案:

答案 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
            }
        }