Exception setcurrentcelladdresscore бросили меняющиеся строки - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь повторить это поведение в окне 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.

У кого-нибудь есть совет?Возможно, мой подход к воспроизведению этого поведения не самый лучший.

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2019

Ваша проблема:

Когда вы щелкаете внутри целевой ячейки, тип меняется с текста на комбинированный список (кажется), а когда вы покидаете ячейку, он берет выбранное значение из комбинированного списка и возвращается обратно к textboxCell со включенным значением.

- это просто простая настройка стиля для свойства DataGridViewComboBoxColumn:

yourGridColumnComboBox.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;

Это сделает его похожим на TextBox, но когда у него будет фокус с выбираемыми элементами, появится кнопка выпадающего меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...