powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / заполнение datagridview из нескольких datatable
23 сообщений из 23, страница 1 из 1
заполнение datagridview из нескольких datatable
    #38303410
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 3 datatable: dtOrder, dtStage и dtClient
в datagridview нужно отобразить следующие поля dtOrder.columns["Номер"], dtClient.Columns["Наименование"], dtStage.columns["Сумма этапа"]
соответствующие таблицы в базе связаны по полям [orders].[orders_ClId] c [client].[ClId], [stage].[stage_ordersId] c [orders].[ordersId]
между объектами datatable надо видимо так же организовать Relation. никак не пойму как.
толкните в нужную сторону?
Спасибо!
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38303926
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scherbakov, а что запросы с JOIN на стороне сервера нынче уже не кошерно?

Ну или ежели хочется особенного изврата и мазохизма, то можете создать динамически DataTable с нужным набором полей, затем нафигачить туда в циклах данных и присоединить сей чудный кусочек к DataGridView.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304142
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

Я просто не совсем понимаю как потом обновлять данные на сервере.
вкратце задача вот в чем:
есть база из 3 таблиц:
Orders (тут хранятся номера заявок, дата создания, флаги о выполнении заявки, дата выполнения заявки)
Client (тут хранятся идентификаторы клиентов, наименования и реквизиты)
Stage (тут хранятся номера этапов заявки, суммы этапов, флаги и даты выполнения)
таблицы связаны следующим образом:
Orders и Client - связь один к одному
Orders и Stege - связь один ко многим, т.е. заявка делится на несколько этапов
И есть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента.
Отображение данных в гриде и третьей таблицы Client пока опустил.
В коде приложения создаю DataSet в который добвляю 2 DataTable: dtOrder и dtClient
дататэйблы заполняю следующим образом:
Код: c#
1.
2.
3.
4.
5.
SQl = "SELECT * FROM [Orders]"
Conn.Open();
m_DataAdapter.SelectCommand = new OdbcCommand(SQL, Conn);
m_DataAdapter.Fill(dtOrders);
Conn.Close();


анологично и с dtClient
теперь хочу заполнить грид полями из Orders и соответствующими им полями из Client
Ненужные для отображения поля в гиде планирую сделать .visible = false
В процессе работы пользователь может добавлять/удалять записи из грида.
При соответствующем действии пользователя на изменение состояния строки в дататэйбле повешу обработчик в котором планирую обновлять базу путем вызова
m_DataAdapter.Update
в дотнете и си шарпе я новичок.
Прошу не кидаться камнями. В полне допускаю что мною используемая концепция извратная.
Подскажите как правильно работать с такой задачей?
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304147
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScherbakovAlex Kuznetsov,

Я просто не совсем понимаю как потом обновлять данные на сервере.
вкратце задача вот в чем:
есть база из 3 таблиц:
Orders (тут хранятся номера заявок, дата создания, флаги о выполнении заявки, дата выполнения заявки)
Client (тут хранятся идентификаторы клиентов, наименования и реквизиты)
Stage (тут хранятся номера этапов заявки, суммы этапов, флаги и даты выполнения)
таблицы связаны следующим образом:
Orders и Client - связь один к одному
Orders и Stege - связь один ко многим, т.е. заявка делится на несколько этапов
И есть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента.
Отображение данных в гриде и третьей таблицы Client пока опустил.
В коде приложения создаю DataSet в который добвляю 2 DataTable: dtOrder и dtClient
дататэйблы заполняю следующим образом:
Код: c#
1.
2.
3.
4.
5.
SQl = "SELECT * FROM [Orders]"
Conn.Open();
m_DataAdapter.SelectCommand = new OdbcCommand(SQL, Conn);
m_DataAdapter.Fill(dtOrders);
Conn.Close();



анологично и с dtClient
теперь хочу заполнить грид полями из Orders и соответствующими им полями из Client
Ненужные для отображения поля в гиде планирую сделать .visible = false
В процессе работы пользователь может добавлять/удалять записи из грида.
При соответствующем действии пользователя на изменение состояния строки в дататэйбле повешу обработчик в котором планирую обновлять базу путем вызова
m_DataAdapter.Update
в дотнете и си шарпе я новичок.
Прошу не кидаться камнями. В полне допускаю что мною используемая концепция извратная.
Подскажите как правильно работать с такой задачей?

из того что написано следует что редактировать следует Orders
вот и работай с этой таблицей
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304162
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

Согласен! В обработчике буду работать с этой таблицей.
Вопрос по большей части был в том как отобразить в одной строке грида колонки из разных дататэйблов.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304172
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scherbakovpation,

Согласен! В обработчике буду работать с этой таблицей.
Вопрос по большей части был в том как отобразить в одной строке грида колонки из разных дататэйблов.

DataGridViewComboBoxColumn
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304204
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

я наверное непонятно выразился.
мне нужно чтобы в гриде сначала шли колонки из dtOrders, а следом за ними колонки из dtClient
Еще я неправильно указал сязь между этими таблицами. на самом деле
Orders и Client - связь многие к одному.
быть может сделать так:
Код: c#
1.
2.
3.
4.
5.
6.
DataTable dtOrdersClient = new DataTable("OrdersClient");
SQL = "SELECT * FROM [Orders] JOIN [Client] ON [Orders_ClId] = [Client_Id]";
Conn.Open();
m_DataAdapter.SelectCommand = new OdbcCommand(SQL, Conn);
m_DataAdapter.Fill(dtOrdersClient);
Conn.Close();


и уже её подгружать в грид, а в обработчике изменения состояния строки брать из изменяемой строки Orders_Id и удалять его из самой Orders?
а потом уже делать
Код: c#
1.
m_DataAdapter.Update(dtOrders);


Такой подход не считается говнокодом?
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304282
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScherbakovТакой подход не считается говнокодом?Подход?

JOIN - это правильно, а вот Ваша реализация оставляет желать лучшего.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304430
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scherbakov,

задача простейшая и опсана в мсдн как типовая, джойнить тут ничего не надо
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304540
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationзадача простейшая и опсана в мсдн как типовая, джойнить тут ничего не надо
Scherbakovесть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента
В принципе да, ничего джойнить не надо. Грид должен отображать результат запроса
Код: sql
1.
SELECT [OrId], ["Дата"], ["Номер"], [orders_ClId] FROM [Orders]

А для отображения наименование клиента следует использовать DataGridViewComboBoxColumn, как предлагалось.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304555
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

поделитесь ссылкой на материал, где описана подобная задача, пожалуйста?
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304598
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scherbakovpation,

поделитесь ссылкой на материал, где описана подобная задача, пожалуйста?
лень искать смотри DataGridViewComboBoxColumn на мсдн
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304603
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

И на этом спасибо!
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304751
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Scherbakov, Поищи книгу Дэвид Сеппа "Microsoft ADO.NET". Она хоть и тсарая, но там хорошо разжевано именно про таблицы, адаптеры, связи и есть перевод на русский.

Относительно DataGridViewComboBoxColumn совет довольно сомнительный. Для его реализации необходимо в отдельную таблицу загрузить всех контрагентов. Это хорошо пока количество контрагентов не станет измеряться десятками-сотнями тыщ:
1. жрет много памяти даже если вам надо пару ордеров по фильтру показать (либо на таблицу конрагентов грузить только тех, которые из числа тех, для которых действителен фильтр для ордеров, что тоже не так легко получится)
2. поиск по релейшину в большой таблице будет занимать все больше времени при росте дочерней таблицы контрагентов.

DataGridViewComboBoxColumn хорош для случаев, когда подчиненная таблица невелика и является банальным справочником с малым количеством записей. Например, у контрагента может быть тип (юридическое лицо, физическое лицо, предприниматель) тогда для двух таблиц контраген-тип контрагента можно использовать эту технику.

JOIN здесь предпочтительнее.

Относительно отображения всех трех ваших таблиц в одном гриде тоже сомнения. Комбинация стандартная для всяких "orders" - накладные, счета etc. Делают, как правило, не один грид со всей этой кашей, а два. В первом dtOrder + dtClient, во втором, зависимом, dtStage по фильтру строки, только соответствующие активной строке из первого.

ПС. То, что имеется в таблице в памяти колонка из другой таблицы (т.е. для SELECT использовался JOIN) совсем не обязывает вас при записи в БД реально апдейтить обе таблицы, достаточно апдейтить только главную.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304786
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IAppleОтносительно DataGridViewComboBoxColumn совет довольно сомнительный. Для его реализации необходимо в отдельную таблицу загрузить всех контрагентов. Это хорошо пока количество контрагентов не станет измеряться десятками-сотнями тыщ:
1. жрет много памяти даже если вам надо пару ордеров по фильтру показать (либо на таблицу конрагентов грузить только тех, которые из числа тех, для которых действителен фильтр для ордеров, что тоже не так легко получится)
2. поиск по релейшину в большой таблице будет занимать все больше времени при росте дочерней таблицы контрагентов.
не нужно советовать херню
в данном кейсе join хуже, по всем показателям, и производительность и время, подумай почему?
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304788
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation и время и занимаемая память
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38304996
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IApple,

Спасибо за ответ! Я уже начал подобную предложенной тобой реализацию, так же со вторым гридом для дочерних записей. DataGridViewComboBoxColumn мне не совсем и подходит, а точнее совсем не подходит. Ну не нужен мне в гриде комбобокс. Не планируется у уже созданной записи менять контрагента, а заполнять комбобокс списком сотрудников, только ради того что потом для текущей записи в гриде в этом комбобоксе отображать контрагента этой заявки вот это уж действительно skyANAреализация оставляет желать лучшего.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38305189
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scherbakovа заполнять комбобокс списком сотрудников, только ради того что потом для текущей записи в гриде в этом комбобоксе отображать контрагента этой заявки

Сам так делаю. Заполняешь по факту не комбобокс, а какой-нибудь DataTable, его вяжешь к ComboBoxColumn, указав правильно displaymember, valuemember и datasource. Все равно тебе так или иначе что-то да надо заполнять. А комбобокс автоматом все сразу увяжет по кодам. А чтоб нельзя было менять, делаешь столбец ридонли.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38305470
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScherbakovAlex Kuznetsov,

Я просто не совсем понимаю как потом обновлять данные на сервере.
вкратце задача вот в чем:
есть база из 3 таблиц:
Orders (тут хранятся номера заявок, дата создания, флаги о выполнении заявки, дата выполнения заявки)
Client (тут хранятся идентификаторы клиентов, наименования и реквизиты)
Stage (тут хранятся номера этапов заявки, суммы этапов, флаги и даты выполнения)
таблицы связаны следующим образом:
Orders и Client - связь один к одному
Orders и Stege - связь один ко многим, т.е. заявка делится на несколько этапов
И есть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента.
Отображение данных в гриде и третьей таблицы Client пока опустил.
В коде приложения создаю DataSet в который добвляю 2 DataTable: dtOrder и dtClient
skiped...


Ну, в общем я тут манёхи поднакидал Вам проектец. Просто как пример того, что и как можно сделать...

Думаю, что реализацию указания этапа для заявки сможете реализовать уже сами...
Проект в VS2012. В решении проект БД (там просто три скрипта для создания таблиц), ну и собственно клиентская часть.
Изучайте...
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38305648
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,
Большое человеческое спасибо!
К сожалению на текущий момент пользуюсь VS2010,
но лицензию vs2012 уже купили, так что в ближайшее время приступлю к изучению!
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38305662
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScherbakovAlex Kuznetsov,
Большое человеческое спасибо!
К сожалению на текущий момент пользуюсь VS2010,
но лицензию vs2012 уже купили, так что в ближайшее время приступлю к изучению!Пожалуйста.
В принципе, то что у Вас VS2010 - не проблема, можно формочки открыть и там, ну а SQL скрипты тоже открываются в блокноте .

Так что удачи...
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38305666
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

формочки я уже посмотрел)
с скриптами создания таблиц тоже все понятно, благо кой-какой опыт работы с MS SQL Server и создания небольших БД имеется. вот только интерфейсы к ним писались под MFC.
...
Рейтинг: 0 / 0
заполнение datagridview из нескольких datatable
    #38305669
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

да собсно и *.cs файлы в np++ довольно удобочитаемы!
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / заполнение datagridview из нескольких datatable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]