Dataset.Copy () не копирует значение новой записи - PullRequest
0 голосов
/ 20 мая 2009

У меня есть набор данных с несколькими таблицами. В частности, одна таблица содержит одну запись. Я добавляю еще одну запись в эту таблицу данных и использую метод Dataset.Copy () для копирования всего объекта набора данных в другой экземпляр.

 Dataset2 = DirectCast(Dataset1.Copy(), dsApplication)

Однако новая копия набора данных, возвращенная этим методом, неверна. Новая строка есть и имеет RowState «Добавлен», но значение пустое (это строковое поле). Набор данных сохраняется в базе данных с пустым значением.

Теперь у меня есть два ряда. Оригинальный и чистый. Если я заменил пустой текст на текст и снова запустил операцию, то в исходном наборе данных строка будет отображаться как текстовая, но с RowState, равным «Без изменений», а второй набор данных снова будет пустым для этой строки.

У кого-нибудь есть объяснение этому поведению? Почему не копируется значение второй строки в операции Dataset.Copy ()? Почему RowState второй строки не отображается как измененный после добавления текста?

Редактировать: исходный набор данных изменяется с помощью сетки данных. Если после того, как я введу текст в ячейку таблицы данных, я нажму на другую строку перед началом операции копирования, она будет работать нормально. Если я не нажму на другую строку, то произойдет сбой. Прежде чем начать операцию копирования, я вызываю метод datagridview.endedit (). Это все еще странно, потому что даже без нажатия на другую ячейку, когда я отлаживаю код, исходный набор данных всегда показывает правильное значение непосредственно перед операцией копирования, поэтому я не понимаю, почему представление данных вообще оказывает какое-либо влияние.

Edit # 2: Во время отладки я заметил, что если я изменю первое значение в gridview, RowState изменится на Modified, как и ожидалось. Однако для любой другой строки RowState остается неизменным, несмотря на фактическое изменение значения.

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

Вы вызывали метод DataSet.AcceptChanges ()? Я считаю, что вам нужно, чтобы изменения вступили в силу ...

0 голосов
/ 26 мая 2009

Проблема оказалась проблемой с элементом управления DataGridView. При вызове метода EndEdit () DataGridView действительно обновил значение в наборе данных, но по какой-то причине RowState остался неизменным. По-видимому, это привело к игнорированию значения операцией Copy (). Я считаю, что это ошибка в DataGridView, потому что это поведение не происходит при редактировании первой строки в сетке, только другие.

Чтобы заставить его работать правильно, вместо вызова DataGridView.EndEdit () я должен вызвать метод Me.Validate () в форме, содержащей DataGridView. Затем вызов метода BindingSource.EndEdit () обеспечивает распространение значения в базовый набор данных. Это приводит к тому, что RowState корректно изменяется на Added или Modified, и все работает как надо.

Как я уже сказал, ИМХО я считаю, что это ошибка в элементе управления DataGridView ... особенно с учетом противоречивого поведения. Я считаю, что шаги для надлежащего получения данных из связанного элемента управления через источник привязки к базовому набору данных должны быть лучше задокументированы, потому что я нашел множество предложенных решений, но у каждого были небольшие различия в вызываемых методах, объектах, к которым они вызывались и порядок, в котором они были названы.

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