Infrastics UltraGrid-网格初始化后的事件

本文关键字:事件 初始化 UltraGrid- 网格 Infrastics | 更新日期: 2023-09-27 18:25:14

我在V15.1中使用Infrastics UltraGrid,初始化网格所需的时间有问题,因为我正在使用"InitializeRow"行事件为网格中的每一行着色和格式化。我想在处理过程中显示一个"繁忙"的图像,因为这可能需要几秒钟的时间。显示图像没有问题,但我看不到在所有行初始化并显示网格后触发的任何事件。如果我只是在填充网格的位置周围添加它,这几乎是即时的,但InitializeRow发生在那之后。。。

Infrastics UltraGrid-网格初始化后的事件

当网格完成初始化所有行时,不会触发任何事件,因为网格从未真正完成初始化行。DataBinding是一个持续的过程,而不是一次性的。当行中的值发生更改时,或者如果将新行添加到网格或数据源中,则会对行进行重新初始化。

史蒂夫可能是在正确的轨道上。你应该想办法加快这个过程。InitializeRow不应该花那么长时间,如果花了很长时间,很可能可以改进代码以提高效率。查看WinGrid性能指南以获取一些提示或在此处发布代码,我很乐意看一看。

如果你绝大多数时候都显示了等待指示符,那么这在很大程度上取决于你对网格执行操作的顺序。是否绑定网格,然后将行添加到数据源?还是先添加所有行?代码中是否有任何内容强制网格绘制?

在一个非常小的示例中,我成功地使用了Paint事件。但我想这可能不会在所有情况下都起作用,尤其是如果您的代码做了一些迫使网格过早绘制的事情。

    private void Form1_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 10000; i++)
        {
            this.ultraDataSource1.Rows.Add(new object[] { i });
        }
        this.ultraGrid1.Paint += UltraGrid1_Paint;
    }
    private void UltraGrid1_Paint(object sender, PaintEventArgs e)
    {
        this.ultraGrid1.Paint -= UltraGrid1_Paint;
        Debug.WriteLine("PAINT");
    }
    private void ultraGrid1_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
    {            
        Debug.WriteLine(e.Row.Index, "InitializeRow");
    }