2011-12-07 72 views
1

我有一个包含对象的Singleton BindingList列表。如何将DataGridView绑定到子列表

我需要将此列表绑定到DataGridView。 我需要网格只显示具有特定属性值的对象(属性IsEmpty,我只想显示具有IsEmpty = false的对象)。

我尝试在绑定完成后遍历DataGridView行,并使用IsEmpty = false隐藏行。这工作,但网格在某些情况下不能很好地工作,如列的排序。

我的结论是我需要有原始列表的子列表,并参考原始列表中具有属性IsEmpty = true的所有对象。

任何想法这样做的最佳方式是什么? (我需要在绑定工作的新列表中保留ListChanged事件)

回答

0

您需要筛选数据源,然后将绑定到您的网格。最好的方法是打电话给linq的Where方法。

IEnumerable<yourType> initialSource = getYourSource(); 
yourGrid.DataSource = initialSource.Where(x => !x.IsEmpty).ToList(); 

这将保持您的原始集合完好无损,并将网格仅绑定到那些匹配过滤器的对象。

编辑

如果你不能使用LINQ,又何尝不是一种简单的循环?

List<yourType> filteredSource = new List<yourType>(); 
foreach(var item in initialSource) 
    if (!item.isEmpty) 
     filteredSource.Add(item); 

yourGrid.DataSource = filteredSource; 
+0

我使用.net框架2.0所以没有Linq对我来说。 我可以创建一个方法,只创建原始列表的子列表,其中IsEmpty = false的对象并将其作为数据源传递。我认为这和你的建议是一样的。 问题是,如果原始列表将更新与新的对象,例如该子列表将不会有此对象 – Shahaf

相关问题