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

时间:2015-11-30 16:57:10

标签: c# .net winforms infragistics

我在V15.1中使用的是Infragistics UltraGrid,并且在初始化网格时遇到了问题,因为我使用'InitializeRow'行事件来为网格中的每一行着色和格式化。我希望在此过程中显示“忙碌”的图像,因为它可能需要很长时间才能处理。显示图像没有问题,但是在初始化所有行并显示网格后,我看不到任何触发的事件。如果我只是将它添加到我填充网格的位置,这几乎是即时的,但是在此之后发生了InitializeRow ......

1 个答案:

答案 0 :(得分:2)

当网格初始化所有行时,没有事件触发,因为网格从未真正完成初始化行。 DataBinding是一个持续的过程,而不是一次性的过程。当该行中的值更改,或者向网格或数据源添加新行时,将重新初始化行。

史蒂夫可能走在正确的轨道上。你应该研究加速这个过程的方法。 InitializeRow不应该花那么长时间,如果花费很长时间,可能会改进代码以提高效率。查看WinGrid Performance Guide以获取一些提示或在此处发布代码,我们很乐意看一下。

如果绝对大多数都显示等待指标,那么很大程度上取决于您对网格执行操作的顺序。您是否绑定网格然后将行添加到数据源?或者首先添加所有行?您的代码中有什么强制网格绘制?

在一个非常小的样本中,我使用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");
    }