Исключение аргумента происходит в form.ShowDialog (), когда я изменяю сортировщик сетки данных формы - PullRequest
3 голосов
/ 24 февраля 2011

Хорошо, я совершенно смущен этой ситуацией, так что терпите меня.

В моем приложении, если вы нажмете кнопку, откроется форма редактора

dgEditor = new fmDataGridFieldEditor();
dgEditor.ShowDialog();

Это отлично работает, и моя форма отображается и работает правильно. Форма имеет сетку данных с некоторыми указанными полями. Теперь, если я затем изменю данные в одном из столбцов таблицы данных (столбец, который предназначен только для чисел), а затем изменит порядок сортировки, щелкнув заголовок столбца, моя форма вылетает. с ошибкой ArgumentException, которая говорит "Объект должен иметь тип Int32" в строке dgEditor.ShowDialog();.

Я не понимаю, что происходит или даже как начать отлаживать это. Этого не происходит, когда я изменяю существующие строки или если введенные мной строки уже отсортированы (например, 0,1,2 хорошо, но 0,1, 0 вызывает сбой).

Кроме того, у меня есть настройка Visual Studio 2010, чтобы разбить все исключения, не только необработанные, но я получаю исключение в том же месте.

Наконец, я связал событие ColumnSortModeChanged сетки данных, чтобы показать окно сообщения, но даже когда сортировки не вылетали из формы, окно сообщения не отображается.

Я не знаю, как поступить с этим.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Отладчик показывает последнюю строку кода, которую вы написали. Что является вызовом ShowDialog (). Если вы посмотрите на стек отладки + Windows + Call, то вы увидите методы в .NET Framework, которые задействованы. Прокрутите окно, если необходимо, чтобы увидеть их все. DataGridView имеет много встроенных функций, исходный код не всегда доступен, хотя вы можете получить его из справочного источника. Не то чтобы это сильно помогло, скорее всего, много.

Очевидно, что в одной или нескольких строках есть недопустимые данные. Выглядит как ведущий космос, только догадываясь здесь, не сидя перед машиной. Реализуйте событие CellValidating, чтобы пользователь не мог ввести неправильно отформатированный номер.

1 голос
/ 15 апреля 2011

Я только что это случилось со мной в VB.Я обнаружил, что когда я копировал значения из текстового поля в сетку, я не выполнял приведение к int.Будучи VB, я предполагал, что он будет приведен неявно, но, как мне кажется, значение ячейки является объектом, поэтому он с радостью принял строку.Все выглядело правильно и работало правильно, пока мне не довелось разобраться в этой колонке.Может быть, это поможет кому-то еще.

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