В чем разница между выходом из редактируемой ячейки таблицы данных нажатием кнопки «Ввод» и нажатием клавиши «Ввод»? - PullRequest
1 голос
/ 19 марта 2012

Первые две строки события CellEndEdit моего обзора данных:

if (dgvOptionsData.SortedColumn == null)
            dgvOptionsData.Sort(dgvOptionsData.Columns["GroupNumber"], 0);

DataGridView привязан к DataTable.

Я получаю ошибку повторного входа (операция недопустима, потому что это приводит к повторному входу в функцию SetCurrentCellAddressCore.) При вызове сортировки ТОЛЬКО при входе в событие CellEndEdit, щелкнув по ячейке. Если я ввожу событие, нажимая ввод, я не получаю эту ошибку. Я также не получаю сообщение об ошибке после сортировки сетки, даже если я редактирую значение в отсортированном столбце.

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

Спасибо Dan

Ответы [ 2 ]

4 голосов
/ 06 июля 2012

Существует небольшая разница между действиями, которые вы выполняете, чтобы совершить редактирование ячейки.По сути, щелкая прочь, вы понимаете, что щелкаете по другой ячейке таблицы данных.Это действие обрабатывается в виде сетки следующим образом:

  • обработчик событий
    • выбрать ячейку в качестве активной (в качестве аргумента щелкают ячейку, например (1,1))
      • зафиксировать отредактированную ячейку
        • Обработчик CellEndEdit (код пользователя)
          • Сортировать сетку
            • выбрать ячейку как активную (в качестве специального значения аргумента для ячейки без (-1, -1))это выдает ошибку из-за повторного ввода в этот метод

Примечаниечто если вы щелкнете по другому элементу управления (не по сетке данных), ваша сортировка будет работать нормально.

Передача изменений с помощью клавиши Enter просто вызывает выбранную ячейку как активную после завершения обработчика CellEndEdit.

0 голосов
/ 06 июля 2012

DataGridView вызывает это исключение для предотвращения и бесконечного цикла. Это будет происходить всякий раз, когда вы пытаетесь изменить активную ячейку во время выполнения операции с активной в данный момент ячейкой. Вы должны ввести событие CellEndEdit, так как сортировка изменяет содержимое ячеек, и вы также редактируете одну из ячеек. Любая операция, которая изменяет активную ячейку, пока используется DataGridView, вызовет это исключение.

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