使用ImageColumn Winforms Datagridview太慢

时间:2009-11-25 22:46:05

标签: winforms datagridview

在我的winforms应用程序中,如果所有列都是文本框列,我的数据网格视图需要 0.8秒才能填充+/- 5000rows。

其中一列是整数列,因此我决定将该列更改为ImageColumn,并在网格的Cell_formatting事件中,使用以下代码确定要显示的相应图像:

private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
    if (dgv.Columns[e.ColumnIndex] is DataGridViewImageColumn && e.ColumnIndex == 1) {
        int cellVal = (int)e.Value;
        switch (cellVal) {
            case 1:
                e.Value = Properties.Resources.Pending;
                dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].ToolTipText = "Item pending attention";
                break;
            case 2:
                e.Value = Properties.Resources.Tick
                dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].ToolTipText = "File is available";
                break;
            default:
                break;
        }
    }
}

有效。但是,datagridview现在需要几乎 5秒来填充自己!!和排序列只是变得太耗时。 5秒现在可能看起来不是很多,但是在大约2个月的时间内行数会增加到大约30,000 !!

有没有更有效的方法来处理这种情况?

谢谢你!

3 个答案:

答案 0 :(得分:1)

这可能没有任何帮助,但您可以先尝试进行e.ColumnIndex == 1比较。从&&&是一个短路运算符,您不会为每列评估dgv.Columns[e.ColumnIndex] is DataGridViewImageColumn

编辑:我真的会使用Visual Studio Profiler或其他一些表演工具来查找瓶颈。

答案 1 :(得分:1)

您是否检查过瓶颈不在读取和(可能)调整图像大小?

如果您以32x32像素(例如)显示图像,但它们存储为128x128像素(比方说),则每次显示图像时都会调整大小。

答案 2 :(得分:1)

如果需要考虑表现,您可以考虑using the DataGridView in virtual mode