在 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);
}
我有一个 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);
}