在DataGridViewComboBox列上设置值非常慢

时间:2015-01-21 14:25:20

标签: c# datagridview datagridcomboboxcolumn datagridviewcombobox

我有一个DataGridView,我将DataGridViewComboBoxColumn添加到,添加值,并通过迭代网格行来设置Value。选定的值是另一个行单元格中的值。这很慢,我不确定我是否使用最佳实践。对于具有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;
        //}

1 个答案:

答案 0 :(得分:0)

我添加了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);
    }