1

我有一个用于显示属性列表的 Infragistics Ultragrid。有时属性是一个数组,所以我为每个元素添加一个子行,以便用户可以选择展开显示数组属性的行并查看所有元素值。

所以对于我使用的每个元素:

var addedRow = mGrid.DisplayLayout.Bands[1].AddNew();

如果我有 300 个元素被调用 300 次并且大约需要 9 秒(我已经分析了应用程序,这个调用占用了 98% 的经过时间)

有没有办法更有效地添加这些子行?

4

2 回答 2

2

我知道我的答案迟到了,但希望有人可以使用我的答案。每当我需要为 ultragrid 设置行和子行时,我只需使用 linq 和匿名类型来设置数据源来生成 propper 集合。假设您有一个人员列表(id、Name)和一个汽车列表(id、CarName 和 OwnerId (personId)),现在您想显示一个显示所有人员的网格视图,并带有一个可扩展标签子行,提供他们拥有的汽车。只需执行以下操作。

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 中,这样做然后您还应该能够编辑网格。

我经常使用上述方法,它的性能非常好,即使对于大量收藏也是如此。

希望这可以帮助某人

于 2011-09-21T21:37:24.090 回答
2

您可能想要使用ultraGrid1.BeginUpdate();ultraGrid1.EndUpdate(true);停止重新绘制屏幕。为我的应用程序带来了巨大的性能优势。

同样在我的情况下,我填充了近 10,000 行,所以使用了 UltraDataSource

于 2011-04-08T09:16:14.517 回答