异常 setcurrentcelladdresscore 抛出更改行

我试图在 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 中编写任何代码。


有人有建议吗?也许我复制这种行为的方法并不是最好的。


POPMUISE
浏览 47回答 1
1回答

繁星点点滴滴

你的问题:当您在目标单元格内单击时,类型从文本更改为组合框(看起来),当您离开该单元格时,它会从组合框中获取所选值并更改回包含该值的 textboxCell。只是 DataGridViewComboBoxColumn 属性的简单样式设置:yourGridColumnComboBox.DisplayStyle&nbsp;=&nbsp;DataGridViewComboBoxDisplayStyle.Nothing;这将使它看起来像一个文本框,但当它具有可选项目的焦点时,它将显示下拉按钮。
打开App,查看更多内容
随时随地看视频慕课网APP