【问题标题】:Ultragrid : how to best add a set of sub rows programatically?Ultragrid:如何以编程方式最好地添加一组子行?
【发布时间】:2011-03-14 15:45:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ultrawingrid


    【解决方案1】:

    我知道我的答案迟到了,但希望有人可以使用我的答案。每当我需要为 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 中,这样做之后您还应该能够编辑网格。

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

    希望这对某人有所帮助

    【讨论】:

      【解决方案2】:

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

      在我的例子中,我填充了将近 >10,000 行,所以使用了 UltraDataSource

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多