SELECT main.date, main.number, main.sclad, sclad.name AS sclad_name
FROM dbo.prihod_hdr AS main LEFT JOIN dbo.sclad ON main.sclad = sclad.id
Проблемы с DataGridView (C#)
Непонятно, зачем прога проверяет значение на null еще в момент ввода строки в datagrid? И как этого избежать?
Если первичный ключ id не заполняется пользователем, тогда вообще не выводи его в таблицу. Если и выводить, то как не редактируемая колонка. Т.е. сначала, пусть хранимая процедура возвратит созданный id и ты его занесёшь в ячейку. Или ещё проще. Перед редактированием создай запросом новую строку в таблице с заполненным id'ом и сделай Update на DataGridView и новая пустая строка готова для заполнения.
Спасибо.
Если честно, я в этом деле начинающий и не всё понял :) Ладно, разберусь.
Но я пробовал делать колонку и невидимой, и нередактируемой, это не помогало. А совсем убрать колонку из DataGridView, наверное, нельзя, иначе как он будет идентифицировать строки в момент Update? Или можно?
И ещё. Ты предлагаешь создавать новую строку с заполненным id-ом и делать Update. Но ведь тогда пользователь на экране увидит эту созданную строку как уже существующую, плюс в самом низу новую строку, что не есть хорошо :(
А может, просто поставить признак nullable в базе данных?
Можно поставить nullable, но заставлять сервер заполнять это поле. А можно программно создать новый id и засунуть его в соответствующую колонку в GridView. Т.е. при вводе новой строки данных данная ячейка уже будет заполненной. Проблема будет в том, если сервер генерит id'ы случайным образом, а не по порядку.
Спасибо, проблема решилась обработкой событий DefaultValuesNeeded и RowValidating. Правда, чтобы разобраться в этом, ушёл весь день...
Есть еще один DataGridView, который берет данные из комбинации двух таблиц, а именно все поля берутся из одной таблицы (Prihod_hdr), среди этих полей есть id склада. Плюс дополнительное поле sclad_name. Запрос для заполнения dataGridView данными выглядит так:
Код:
Команды InsertCommand, DeleteCommand, UpdateCommand в соответствующем TableAdapter'е я тоже написал руками. Всё вроде должно работать.
Но вот запускаю прогу, добавляю новую строку туда, и тут при вызове dataGridView->Update() выскакивает сообщение "unknown field name, unknown field date, unknown field sclad" и т. д. Не понимаю, почему...
Попробуй подтвердить ввод строки вызовом функции CommitEdit()
Да нет, ты неправильно понял, я не программно добавляю строку, просто пользователь вводит новую строку или несколько строк, а при закрытии формы срабатывает обработчик Form1_Close, в котором я прописал dataGridView1->Update(), тут-то сообщение и выскакивает.
Причем в программе есть другие формы, на которых также висят DataGridView, на которых аналогичным образом вызывается Update при закрытии формы, но в них всё срабатывает! Просто там в качестве источника данных используется одна таблица, а не две, и соответственно все запросы и команды сгенерированы автоматически. А здесь приходится вручную писать.
Видимо, без выкладывания кода разобраться не получится... Ладно, попробую сам, методом тыка.
Ищу решение аналогичной проблемы -- DataGridView и две связанные таблицы: реально это или нет?!