将DGV中的单元格类型从ComboBox更改为TextBox仅适用于第0行?

时间:2010-07-30 09:29:23

标签: c# datagridview

我整天都在努力让我的DataGridView表现得很好。当用户选择条目

时,我正在使用以下代码将ComboBox单元格更改为TextBox

它对第0行起作用,但对于所有其他行,ComboBox仍保留在屏幕上,即使调试说它是TextBox单元格! (检查CurrentCell)。

有人有线索吗?

这是一个片段:

void comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataGridViewComboBoxEditingControl cb = sender as DataGridViewComboBoxEditingControl;
        if (cb.SelectedIndex == 0 && dataGridViewReceivers.CurrentCell is DataGridViewComboBoxCell)
        {
            cb.SelectedIndexChanged -= new EventHandler(comboBox_SelectedIndexChanged);
            dataGridViewReceivers.CellLeave -= new DataGridViewCellEventHandler(dataGridViewReceivers_CellLeave);
            dataGridViewReceivers.EndEdit();

            // Change to editing mode
            int row = dataGridViewReceivers.CurrentCell.RowIndex;
            dataGridViewReceivers[0, row] = new DataGridViewTextBoxCell();
            dataGridViewReceivers[0, row].Value = "";
            dataGridViewReceivers.BeginEdit(false);
            dataGridViewReceivers.RefreshEdit();

            dataGridViewReceivers.CellLeave += new DataGridViewCellEventHandler(dataGridViewReceivers_CellLeave);
            cb.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged); 
        }
    }

使用BindingSource.AddNew()添加新行。

谢谢!

修改

当我调用代码替换单元对象时,在事件处理程序之外 - 它可以工作!这表明值得尝试代表...

修改

问题已解决 事实证明,如果我在更换过程中从DGV移除焦点,它就可以了!只需将焦点暂时设置为一个按钮,然后再返回就可以了![/ p>

1 个答案:

答案 0 :(得分:0)

出于某种原因,DGV不允许我在焦点时更改细胞类型。取消选择单元格是不够的 - 需要从控件中移除焦点。

这看起来像一个.NET错误!...