6

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

但似乎我不能在两者之间进行转换,谁能指出我错过了什么?!

非常感谢

4

5 回答 5

4

只是要指出,您的 PagingList 不扩展 BindingList,它通过组合使用它。

我遇到了这个寻找类似的答案。这里的答案似乎都没有为您的问题提供明确的解决方案,尽管他们提到了解决问题的宝贵要点。我想我会为任何路过的人添加一个。

因此,鉴于提供的信息,简单的答案是否定的,但是无需重构类即可满足您的需求的简单解决方案是:

IEnumerable<AccountInfo> accounts= bll.GetAccounts(u.UserName, u.Password);
myPagingList.Collection = new BindingList<Foo>(myfoos.ToList());

因此,您必须将 AccountInfo 项目物理添加到您的 BindingList 实例属性“集合”。

于 2016-11-08T11:14:17.593 回答
3

BindingList<T>implements IEnumerable<T>,但并非所有IEnumerable<T>都是绑定列表(事实上,大多数都不是)。

您应该能够创建一个新的 BindingList 并在可枚举实例中添加项目。

于 2009-07-01T16:31:43.647 回答
1

您将 PagingList 传递到您的 RenderListingsRows,它不实现 IEnumerable。

一般来说,要使 PagingList 成为 BindingList 的扩展,它必须实现 BindingList 实现的所有接口。但目前它没有实现其中任何一个。

您应该从 BindingList 继承 PagingList,或者实现所有这些接口,即使只是通过调用 Collection 对象的方法。

或者,您可以只写 for (var item in list.Collection)

于 2009-07-01T16:34:23.537 回答
0

Send the binding list to the RenderListingsRows not the paging list. PagingList does not extend BindingList it uses composision instead. Hence the issue.

Example below.

 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
            }
        }
于 2009-07-02T11:03:08.050 回答
0

如果您的帐户集合实现 IList<AccountInfo> 您应该能够做到这一点:

PagedList<AccountInfo> paged = new PagedList<AccountInfo>();
paged.Collection = new BindingList<AccountInfo>((IList<AccountInfo>)accounts);
于 2009-07-01T16:39:23.317 回答