我有一个Infragistics Ultragrid,用于显示属性列表。有时属性是一个数组,所以我为每个元素添加一个子行,这样用户可以选择展开显示数组属性的行并查看所有元素值。
因此对于我使用的每个元素:
var addedRow = mGrid.DisplayLayout.Bands[1].AddNew();
如果我有300个元素被调用300次并花费大约9秒(我已经分析了应用程序,这个调用占用了98%的经过时间)
有没有办法更有效地添加这些子行?
答案 0 :(得分:2)
您可能希望使用ultraGrid1.BeginUpdate();
和ultraGrid1.EndUpdate(true);
来停止重新绘制屏幕。为我的应用程序带来了巨大的性能优势。
同样在我的情况下,我填充了大约10,000行,所以使用了UltraDataSource
答案 1 :(得分:2)
我知道我迟到了答案,但希望有人可以使用我的答案。每当我需要为ultragrid设置行和子行时,我只需使用linq和anonymous类型设置数据源以生成propper集合。 假设您有一个人员列表(id,名称)和汽车列表(id,CarName和OwnerId(personId)) 现在,您希望显示一个显示所有人的gridview,并使用expandabel子行提供他们拥有的汽车。只需执行以下操作。
List<Person> persons = GetAllPersons();
List<Car> cars = GetAllCars();
grid.DataSource = persons.Select(x => new {x.Id, x.Name, Cars = cars.Where(z => z.OwnerId == x.Id).ToList()}).ToList();
请注意我制作的匿名类型,这将生成一个具有id,Name和汽车集合的对象列表。另请注意,我在最后一行调用ToList方法两次,这是为了使ultragrid正确绑定所必需的。
进一步注意,如果你需要编辑gridview,上面的方法是不够的,因为ultragrid需要一个底层的数据源进行修改,我不相信这会应付。但是在互联网上你会发现一些可以将Linq集合复制到DataTable中的扩展,这样做,然后你也应该能够编辑网格。
我经常使用上面的方法,即使对于大量的收藏,它也表现得非常好。
希望这有助于某人