为了账号安全,请及时绑定邮箱和手机立即绑定

异常 setcurrentcelladdresscore 抛出更改行

异常 setcurrentcelladdresscore 抛出更改行

C#
POPMUISE 2022-12-31 13:21:27
我试图在 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;

这将使它看起来像一个文本框,但当它具有可选项目的焦点时,它将显示下拉按钮。


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 46 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信