在 DataGridViewComboBox 列上设置值非常慢

Setting Value on DataGridViewComboBox column very slow

我有一个 DataGridView,我将 DataGridViewComboBoxColumn 添加到其中,添加值,并通过遍历网格行来设置值。所选值是来自另一个行单元格的值。这非常慢,我不确定我是否在使用最佳实践。对于具有 3000 行的网格,这需要两分钟多的时间才能完成。我尝试通过行计数进行迭代并使用 foreach 循环(在下面的注释代码中)得到相同的结果。有没有更快的方法来做到这一点?这是我的代码:

DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
        cmb.HeaderText = "New Class";
        cmb.Name = "cmb";

        foreach (DataGridViewRow row in dgClasses.Rows)
        {
            if (row.Cells[0].Value != null)
            {
                cmb.Items.Add(row.Cells[0].Value);
            }
        }

        dgProducts.Columns.Add(cmb);

        for (int i = 0; i < dgProducts.Rows.Count; i++)
        {
            dgProducts.Rows[i].Cells["cmb"].Value = dgProducts.Rows[i].Cells["Class"].Value;
        }

        //foreach (DataGridViewRow row in dgProducts.Rows)
        //{
        //   row.Cells["cmb"].Value = row.Cells["Class"].Value;
        //}

我添加了 DataPropertyName 并摆脱了网格行的循环。现在加载速度非常快。

private void AddClassCombobox()
    {
        DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
        cmb.HeaderText = "New Class";
        cmb.Name = "cmb";
        cmb.DataPropertyName = "Class";  // << Added this

        foreach (DataGridViewRow row in dgClasses.Rows)
        {
            if (row.Cells[0].Value != null)
            {
                cmb.Items.Add(row.Cells[0].Value);
            }
        }

        dgProducts.Columns.Add(cmb);
    }