我有一个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;
//}
答案 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);
}