Я пытаюсь повторить это поведение в окне ColumnMappings из SQL Management Studio: Изображение здесь
Когда вы щелкаете внутри ячейки назначения, тип меняется с текстав комбинированный список (кажется), и когда вы покидаете ячейку, он берет выбранное значение из комбинированного списка и возвращается обратно в 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.
Я уже пытался перенести строку, в которой я переназначаюЯчейка Введите в вызове вызова, как это:
dgvwMapping.BeginInvoke(new MethodInvoker(delegate ()
{
dgvwMapping[e.ColumnIndex, e.RowIndex] = cbbxDestination;
}));
Но это бесконечно зацикливает событие.Даже обертывание всего кода внутри события делает цикл событий неопределенным.Я еще ничего не кодировал внутри CellEndEdit или CellLeave.
У кого-нибудь есть совет?Возможно, мой подход к воспроизведению этого поведения не самый лучший.
Спасибо