将 DGV 中的单元格类型从 ComboBox 更改为 TextBox 仅适用于第 0 行?
Posted
技术标签:
【中文标题】将 DGV 中的单元格类型从 ComboBox 更改为 TextBox 仅适用于第 0 行?【英文标题】:Changing cell type in DGV from ComboBox to TextBox only works for row 0? 【发布时间】:2010-07-30 09:29:23 【问题描述】:我整天都在努力让我的 DataGridView 正常运行。当用户选择条目时,我正在使用以下代码将 ComboBox 单元格更改为 TextBox
它在第 0 行工作得很好,但对于所有其他行,组合框仍保留在屏幕上,即使调试表明它是一个文本框单元格! (检查 CurrentCell)。
有人知道吗?
这是一个sn-p:
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 上移开焦点,它就可以工作!只需暂时将焦点设置为按钮,然后再返回即可!
【问题讨论】:
代理解决不了你的问题。 不,你是对的。查看我的最后一次编辑! 【参考方案1】:由于某种原因,DGV 不允许我在获得焦点时更改单元格类型。取消选择单元格是不够的 - 需要从控件中移除焦点。
这看起来像一个 .NET 错误!...
【讨论】:
以上是关于将 DGV 中的单元格类型从 ComboBox 更改为 TextBox 仅适用于第 0 行?的主要内容,如果未能解决你的问题,请参考以下文章
将 DataGridView 的单个单元格变成 Combobox
C# Winforms DataGridView 选定单元格正在清除单元格值