为什么这段代码粘贴到DataGridView这么慢

本文关键字:DataGridView 段代码 代码 为什么 | 更新日期: 2023-09-27 17:52:12

string s = Clipboard.GetText().Replace("'r", " ");
string[] lines = s.Split(''n');
int row = dgView.CurrentCell.RowIndex;
int col = dgView.CurrentCell.ColumnIndex;
int linesCount = lines.Count();
if ((row + linesCount) - dgView.RowCount > 0) dgView.Rows.Add((row + linesCount) - dgView.RowCount);
asyncSqlResultsViewer.publicToolStripProgressBar.Maximum = linesCount;
asyncSqlResultsViewer.publicToolStripProgressBar.Step = 1;
asyncSqlResultsViewer.publicToolStripProgressBar.Visible = true;
dgView.ReadOnly = true;
foreach (string line in lines)
{
    if (line.Length > 0)
    {
        string[] cells = line.Split(''t');
        for (int i = 0; i < cells.GetLength(0); ++i)
        {
            if (col + i < dgView.ColumnCount)
            {
                dgView[col + i, row].Value = cells[i];
            }
            else
            {
                break;
            }
        }
        row++;
    }
    else
    {
        break;
    }
    asyncSqlResultsViewer.publicToolStripProgressBar.PerformStep();
}

它慢得可笑。粘贴500行5列大约需要30秒。请考虑到可能已经有数据在DataGridView和我不一定要覆盖它(这一切都取决于开始单元格)。我不知道如何使用数据表并将其指定为数据源如果你们有这个想法的话

为什么这段代码粘贴到DataGridView这么慢

你应该在更新网格之前暂停布局:

dgView.SuspendLayout();
// Do updates here
dgView.ResumeLayout();

我将AutoSizeColumnsMode设置为AllCells。粘贴时需要将其设置为None。这产生了指数级的差异。我的30秒现在变成了不到半秒。