我试图在 SQL Management Studio 的 ColumnMappings 窗口中复制此行为: Image Here当您在目标单元格内单击时,类型从文本更改为组合框(看起来),当您离开该单元格时,它会从组合框中获取所选值并更改回包含值的 textboxCell。它对该列中的每个单元格执行此操作。因此,当我加载数据时,所有单元格都是文本框,当用户在该列中输入任何单元格时,我会这样做:private void dgvwMapping_CellEnter(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 1) { string txt = dgvwMapping[e.ColumnIndex, e.RowIndex].Value.ToString(); DataGridViewComboBoxCell cbbxDestination = new DataGridViewComboBoxCell() { DataSource = new List<string>(someList) }; cbbxDestination.Value = txt; dgvwMapping[e.ColumnIndex, e.RowIndex] = cbbxDestination; } }到目前为止一切顺利,如果我从一个单元格切换到另一个单元格一切正常,除非我单击具有坐标 [1,1] 的单元格。唯一抛出“操作无效,因为它导致对 SetCurrentCellAddressCore 的重入调用”异常的是 columnIndex 等于 rowIndex 的异常。我已经尝试在 invoke 调用中包装我重新分配 Cell Type 的行,如下所示:dgvwMapping.BeginInvoke(new MethodInvoker(delegate (){ dgvwMapping[e.ColumnIndex, e.RowIndex] = cbbxDestination;}));但它无限期地循环事件。即使将所有代码都包装在事件中也会使事件无限循环。我还没有在 CellEndEdit 或 CellLeave 中编写任何代码。有人有建议吗?也许我复制这种行为的方法并不是最好的。
1 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
你的问题:
当您在目标单元格内单击时,类型从文本更改为组合框(看起来),当您离开该单元格时,它会从组合框中获取所选值并更改回包含该值的 textboxCell。
只是 DataGridViewComboBoxColumn 属性的简单样式设置:
yourGridColumnComboBox.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
这将使它看起来像一个文本框,但当它具有可选项目的焦点时,它将显示下拉按钮。
- 1 回答
- 0 关注
- 68 浏览
添加回答
举报
0/150
提交
取消