DataAdapter.Update(DataTable) -> Exception: "Cannot change ReadOnly Property..."

Витал
Дата: 11.05.2006 15:24:06
В датасете есть таблица, в которую я добавил пару полей с Expression, чтоб отображать некоторые поля из родительской таблицы.
Пример выражения: Parent(Nom_Groups).NameShort

При вызове метода Update датаадаптера получаю сообщение об ошибке: "Cannot change ReadOnly Property...".
Если убрать вычисляемые поля, все нормально. С ними - ошибка.

 Me.dsKTD.EnforceConstraints = False
 Me.daNomGroup.MissingSchemaAction = MissingSchemaAction.Ignore
 Me.daNomGroup.MissingMappingAction = MissingMappingAction.Ignore
Никак не влияют.
ContinueUpdateOnError = True

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

Мож кто сталкивался. В поиске ничего не нашел, ни на форуме про ADO, ни здесь...
Не охота как-то перед апдейтом удалять эти столбцы, потом на место ставить. Но, боюсь, что придется.
Deft
Дата: 12.05.2006 11:32:20
Все правильно! Абсолютно разумное исключение!
ИМХО Тебе нужно создать DataView (из этой таблицы) и в нем добавлять вычисляемые столбцы!

а в DataGrid.DataSourse включать уже не таблицу, а DataView!

_____________________________________________
Правды как минимум две...
Deft
Дата: 12.05.2006 11:38:03
Или как вариант, создать таблицу(запрос-копию) уже с ключевыми полями, и при изменении данных в запросе изменять и таблицу, тогда точно при сохранении ничего не будет!


_____________________________________________
Правды как минимум две...
Витал
Дата: 15.05.2006 11:38:27
Deft
Все правильно! Абсолютно разумное исключение!

Чего ж тогда Fill проходит как по маслу? Добавление строки в таблицу датасета прохолит также без вопросов. Но вот при передаче обновлений в БД... начинается выпендрёж (или правильнее - выпендрож?).
Deft
ИМХО Тебе нужно создать DataView (из этой таблицы) и в нем добавлять вычисляемые столбцы!

а в DataGrid.DataSourse включать уже не таблицу, а DataView!

Хорошо бы, но как в DataView добавить столбцы?
Витал
Дата: 16.05.2006 09:20:26
В принципе, если установить для UPDATE и INSERT свойство UpdatedRowSource = None, то ошибки нет - все нормально. Однако поля в таблице датасета при этом не обновляются, что может быть важно для автоинкриментных полей.
Deft
Дата: 17.05.2006 12:29:43
Витал

Чего ж тогда Fill проходит как по маслу? Добавление строки в таблицу датасета прохолит также без вопросов. Но вот при передаче обновлений в БД... начинается выпендрёж (или правильнее - выпендрож?).

А как Fill должен проходить? А зачем они тогда называются вычисляемыми?
Тем более, что Fill дает данные для вычислемых столбцов, но не об этом речь

Пришла в голову мысль, а почему тебе не сделать так:

твоя таблица с вычисляемыми полями: tbl1 (поля field1 и field2 - вычисляемые)

и перед тем как сохранить все твои изменения делаешь так:

Dim tbl2 as New DataTable
tbl2=tbl1.Copy
tbl2.Columns("field1").Delete
tbl2.Columns("field2").Delete
'А потом 
Adapter.Update(tbl2)

'И все! 

Витал
Дата: 17.05.2006 14:23:51
Дык! Я и говорил в первом посте, что не охота это делать.
автор
Не охота как-то перед апдейтом удалять эти столбцы, потом на место ставить. Но, боюсь, что придется.
Deft
Дата: 24.05.2006 11:52:56
А их не надо на место ставить!

Ты перед сохранением создаешь копию таблицы, которая после сохранения тебе не нужна!

При следующем сохранении код снова её создаст, а потом удалит!

_____________________________________________
Правды как минимум две...
Витал
Дата: 16.06.2006 16:26:33
Deft
А их не надо на место ставить!

Ты перед сохранением создаешь копию таблицы, которая после сохранения тебе не нужна!

При следующем сохранении код снова её создаст, а потом удалит!

_____________________________________________
Правды как минимум две...


Мне кажется, что этот ход тоже самое, что UpdatedRowSource = None.
А если я все-таки хочу получать и записывать в датасет значение автоинкреементного поля из БД, то что делать? Понимаю, что ручками можно все....