我试图在 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 中编写任何代码。
有人有建议吗?也许我复制这种行为的方法并不是最好的。
繁星点点滴滴
相关分类