10 / 10 / 1
Регистрация: 27.04.2010
Сообщений: 37
|
|
1 | |
Как в одном DataGridView вывести данные из нескольких таблиц27.04.2010, 19:37. Показов 30270. Ответов 23
Метки нет (Все метки)
Здравствуйте извините за повторения темы прошу строго не судить меня.у меня возникла проблема есть 5 таблицы
1-tovar содержит она (ID,Code,Firma_ID,Model_ID,Color_ID,Size_ID,Total_tovar) 2-firma содержит она (ID,cros) 3-model содержит она (ID,sl_55) 4-color содержит она (ID,black) 5-size содержит она (ID,xxl) мне нужно чтобы в моём DataGridView получилось вот так Code cros sl_55 black xxl total_tovar и чтобы потом эти данные можно было редактировать и сохранять в БД делал всё конструктором,сделал привязку к форме с помощью Binding Source в мастере настройки выбрал все свои таблицы появился компонент tmpDataSet далее из тоолбокса вытащил DataGridView в нём выбрал источник данных таблицу tovar при выборе следующей таблицы (color) она заменила таблицу товар (а если выбирать FK_sell_tovar) то появляться поле ID и всё остальное пропадает если вас не затруднит опишите пожалуйста,что и как делать куда вставлять по пунктам я новичок в этом деле и много во не понимаю,а чтение книг плохо помогает
0
|
27.04.2010, 19:37 | |
Ответы с готовыми решениями:
23
Как вывести данные в DataGridView из 2-х связанных таблиц в БД? Как вывести данные из двух таблиц в один datagridview Вывести результат запроса в DataGridView (запрос из нескольких таблиц) Отображение нескольких таблиц в нескольких dataGridView |
27.04.2010, 22:46 | 2 |
Сообщение было отмечено как решение
Решение
Варианты
1 В базе делаете представление на выборку необходимых данных, в dataSet делаете адаптер на это представление 2. в dataSet сразу делаете адаптер со сложным запросом на выборку Оба варианта годятся в основном для просмотра данных. Для редактирования можно применить все как вы сделали, только столбцы с внешними индексами сделать в виде выпадающих списков (если не ошибаюсь свойство columnType)
4
|
10 / 10 / 1
Регистрация: 27.04.2010
Сообщений: 37
|
|||||||||||
27.04.2010, 23:26 [ТС] | 3 | ||||||||||
Спасибо за ответ,у меня,что то получилось методом научного тыка,залез в настройки DataSet там у меня была логическая модель моей БД нашёл в Properties CommandText там прописал
Теперь проблема новая,добавил на форму кнопку button (Update) в ней прописал как было написано в книги
подскажите как правильно мне сохранить данные (button) с DataGridView
2
|
27.04.2010, 23:38 | 4 |
Тут самое главное правильно настроить свойства InsertCommand,UpdateCommand, DeleteCommand для соответсвующих адаптеров.
В Вашем случае происходит вызов адаптеров для всех таблиц размещенных в tmpDataSet. Смотрите сообщение об ошибке, там скорее всего указано, какой адаптер не срабатывает, его и правьте.
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|
07.05.2012, 19:50 | 5 |
nio, подскажите пожалуйста, как настроить эти свойства?
Они не создаются автоматически при таком изменённом Fill,GetData()-запросе. Я всё делал через мастеров, и аналогично в конструкторе своего dataset'а правой кнопкой жму на Fill,GetData()-запросе - Настроить - Дополнительно - ставлю все 3 галки - Далее - и нижний чекбокс ("Создайте методы для отправки обновлений непосредственно в базу данных. Создаёт методы Insert, Update, Delete которые...") не активен почему-то. Порыскал по DataSetX.Designer.cs, там вроде создались методы эти, но только для одной из таблиц (у меня заказы и клиенты, к заказу в поле привязан один клиент (по ID), в модели связь "1 клиент <-> * заказов") - клиенты. А для более сложной таблицы заказы (в смысле имеющей связь с другой таблицей) не создались.
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|||||||||||
08.05.2012, 10:35 | 7 | ||||||||||
Заполняю datagridview заказов (Order). В бд в таблице Order ключевое поле - OrderID, поле для связи с заказчиком данного заказа - ClientsClientsID (автоматически создалось при создании связи), в таблице Clients ключевое поле - ClientsID.
Мой запрос:
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|
08.05.2012, 10:44 | 9 |
У меня на форме для создания заказов есть кнопки создать новый и удалить выделенный. Так вот создание нового (а значит и InsertCommand, да?) работает, ничего не трогал. А удаление нет. Как и где прописать DeleteCommand?
0
|
08.05.2012, 10:47 | 10 |
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|
08.05.2012, 10:56 | 11 |
У меня не выходит никакого сообщения об ошибке, раньше удалял через DeleteOrderById, теперь эта функция не сгенерировалась (не найдена функция...), попробовал через orderSetBindingSource.RemoveCurrent() [так вроде работает ведь? когда строка таблицы выделена]..
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|
08.05.2012, 11:06 | 13 |
Из DataGridView и из БД
0
|
08.05.2012, 11:25 | 14 |
тогда объясняю еще раз.
при удалении строки из dgv, в DataTable эта строка получает RowState= Deleted. при необходимости передать изменения в БД вызывается метод Update для адаптера связанного с этой DataTable. Адаптер перебирает строки в источнике, и на основании состояния RowState принимает решение какой запрос (InsertCommand,UpdateCommand, DeleteCommand) выполнить для текущей строки. Таким образом, для нормальной работы адаптера необходимо настроить эти команды.
1
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|
08.05.2012, 11:29 | 15 |
Понял примерно, но где их настраивать? Есть ли какой-нибудь wizard как для метода Fill?
Если нет, то в каком файле писать код, и какой примерно?
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|||||||||||
08.05.2012, 12:33 | 17 | ||||||||||
это нашёл, для DeleteCommand запустил мастера (имею в виду построитель запросов), а как прописать SQL-команду чтобы удалить текущую (выбранную в dgv) строку из таблицы Order? Типа как
Он по умолчанию в построителе прописал
0
|
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 13
|
|||||||||||
08.05.2012, 14:05 | 19 | ||||||||||
Хм, логично, чёт я не догадался, извиняюсь)
Написал так:
вопросы: 1) достаточно будет, если я передаю только один параметр? (в адаптере для одной таблицы передаются несколько параметров, но это было прописано автоматически, а ключ OrderID у каждой записи уникален, как впрочем и ClientsID) 2) Какую теперь функцию (возможно принимающую dataGridView2.SelectedRows[0] или dataGridView2.SelectedRows[0].Cells["OrderID"].Value) мне вызвать в коде моей кнопки, чтобы как раз была впоследствии неявно вызвана команда deleteCommand? Добавлено через 10 минут Попробовал вот так делать https://www.cyberforum.ru/post2408513.html
0
|
08.05.2012, 14:07 | 20 |
я думаю да. Все зависит от того сколько пользователей у программы. Автоматически созданный запрос проверяет все поля записи для обеспечения целостности данных при одновременной работе с данными нескольких пользователей (защищает от возникновения критических ситуаций, когда разные пользователи редактируют одну и ту же запись)
adapter.Update, там перегрузок много, выбирай любую
1
|
08.05.2012, 14:07 | |
08.05.2012, 14:07 | |
Помогаю со студенческими работами здесь
20
Нужно, чтобы при выборе элемента в одном DataGridView отображались связанные данные в другом DataGridView Отображение разных таблиц из БД в одном dataGridView Создание нескольких таблиц в одном отчете reportviewer В одном DataGridView выводить столбцы из двух связанных таблиц из БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |