Проблемы с DataGrid.Использование DataSet.Merge с «Редактировать шаблон» - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь отладить проблему с приложением WinForm.

Приложение использует DataGridView, связанный с DataSet.

Пользователь может выбрать строку и нажать «Изменить», и появится форма редактирования, чтобы пользователь мог редактировать строку и сохранить свои изменения.

Если DataGridView сортируется по одному или нескольким столбцам, и пользователь редактирует строку более одного раза и изменяет положение этих строк в DataGrid (путем изменения одного из отсортированных столбцов ДВАЖДЫ), DataGridView выходит из синхронизации, и я получаю Ошибки исключения.

Вот как код написан:

Когда пользователь щелкает строку и нажимает кнопку редактирования (пользователь может выбрать только одну строку), эта строка передается в EditFom. Форма редактирования создает пустой набор данных и загружает эту строку. Когда пользователь закончил, вызывающая форма использует DataSet.Merge для объединения этих изменений обратно в свой DataSet.

Вот несколько сценариев, которые говорят мне, что это имеет отношение к «слиянию» и сортировке:

(Обратите внимание, я никогда не меняю фактическую «сортировку», я говорю об изменении значения одного из отсортированных по столбцам в одной из строк.)

  1. Если пользователь редактирует строку непосредственно в сетке и изменяет значение одного из столбцов, используемых для сортировки, затем изменяет его снова и т. Д. Строка перемещается по сетке, как и должно быть, и когда пользователь нажимает сохранить, все сохраняет нормально.

  2. Если пользователь редактирует строку (непосредственно в таблице ИЛИ через «шаблон») и не изменяет ни один из столбцов «сортировки», просто выполняет редактирование (тем самым устанавливая «Состояние» строки на Изменено, верно ...), ТОГДА пользователь редактирует строку, используя Шаблон (который проходит через отдельный DataSet и объединяет данные, когда это сделано), и изменяет один из сортируемых столбцов (когда это сделано, сетка должна прибегнуть и строка должна «переместиться»), строка не будет перекрашена, она останется в той же позиции в сетке, в которой она находилась до редактирования шаблона. (Хотя данные сохраняются нормально, и вы можете обновить сетку, и она сортируется должным образом.) Очевидно, DataGrid не уведомляется о том, что RowChanged в этом сценарии (или это так, но он ничего не делает с этим).

  3. Если пользователь редактирует строку непосредственно в таблице, изменяет столбец сортировки (строка перемещается), затем редактирует строку с использованием шаблона и снова изменяет этот столбец, мы получаем те же результаты, что и 2, выше. Данные сохраняются нормально, но когда пользователь покидает шаблон редактирования, сетка не прибегает.

(Это тот, который вызывает ошибку исключения.)

  1. Если пользователь редактирует строку с использованием шаблона, изменяет столбец сортировки и оставляет шаблон, сетка данных восстанавливается, и строка перемещается правильно. Затем, если пользователь редактирует одну и ту же строку, используя Template Edit, и изменяет столбец сортировки снова. Когда пользователь покидает шаблон редактирования, сетка данных не прибегает, а когда пользователь сохраняет данные и обновляет сетку, мы получаем ошибку:

System.InvalidOperationException: внутренний индекс DataTable поврежден: '5'.

И иногда мы получаем сообщение об отсутствии первичного ключа.

Какой-нибудь совет, как "отладить" это? Я чувствую, что это как-то связано с набором данных internediate, который использует шаблон редактирования, и слиянием. Как будто источник данных DataGrid не синхронизируется со строками DataGrid.

1 Ответ

0 голосов
/ 07 апреля 2011

Я должен был сделать несколько Google'ing, прежде чем опубликовать это.Кажется, это распространенная ошибка, и я нашел ОГРОМНЫЙ пост об этом на сайте MS.К сожалению, я попробовал большинство их предложений, но, скорее всего, я найду свой ответ там.Я просто хотел сделать это, если кому-то интересно:

http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/18544cd3-1083-45fe-b9e7-bb34482b68dd

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