一旦显示表单,DataGridViewComboBoxCell.DataSource将设置为null

Phi*_*ney 4 c# datagridview winforms datagridviewcomboboxcell

我在表单的事件处理程序中添加了一个DataGridViewComboBoxColumna DataGridView,LoadDataGridViewComboBoxCell在列中设置了每个的DataSource .但是,一旦显示表单,每个的DataSource DataGridViewComboBoxCell都已设置为null.这是我用来填充列及其单元格的代码:

DataGridViewComboBoxColumn comboCol;

comboCol = new DataGridViewComboBoxColumn();
comboCol.Name = "ComboCol";
comboCol.HeaderText = "Combo Column";
comboCol.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

this.dgv.Columns.Add(comboCol);

for (int i = 0; i < dgv.Rows.Count; i++)
{
    // This datatable is actually populated here!
    DataTable myData = PopulatedDataTable(dgv.Rows[i].Cells["info"].Value); 

    DataGridViewComboBoxCell DCC = new DataGridViewComboBoxCell();

    DCC = (DataGridViewComboBoxCell)dgv.Rows[i].Cells["CombolCol"];
    DCC.DataSource = myData;

    DCC.DisplayMember = "Association"; // Association is a column in myData
    DCC.ValueMember = "Association";
}

dgv.Columns["association"].Visible = false;
Run Code Online (Sandbox Code Playgroud)

如果我将它放在我单击表单加载后单击的按钮中,此代码完全符合预期,但在表单加载期间执行时,数据源将被清除.有什么建议?

Phi*_*ney 6

我最终通过处理DataBindingCompletedatagrid 的事件来解决这个问题.

显然,当您在表单Load事件期间填充数据网格时,数据网格中的数据会反弹.这搞砸了我试图添加的未绑定列中的数据.

通过将我的代码放在DataBindingComplete事件处理程序上面(并在开始时禁用事件处理程序并在事件结束时重新启用它),在适当的时候添加列,并且.NET的愚蠢不会扰乱它们的数据.