|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
есть 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. никак не пойму как. толкните в нужную сторону? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2013, 15:33 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Scherbakov, а что запросы с JOIN на стороне сервера нынче уже не кошерно? Ну или ежели хочется особенного изврата и мазохизма, то можете создать динамически DataTable с нужным набором полей, затем нафигачить туда в циклах данных и присоединить сей чудный кусочек к DataGridView. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2013, 20:54 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, Я просто не совсем понимаю как потом обновлять данные на сервере. вкратце задача вот в чем: есть база из 3 таблиц: Orders (тут хранятся номера заявок, дата создания, флаги о выполнении заявки, дата выполнения заявки) Client (тут хранятся идентификаторы клиентов, наименования и реквизиты) Stage (тут хранятся номера этапов заявки, суммы этапов, флаги и даты выполнения) таблицы связаны следующим образом: Orders и Client - связь один к одному Orders и Stege - связь один ко многим, т.е. заявка делится на несколько этапов И есть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента. Отображение данных в гриде и третьей таблицы Client пока опустил. В коде приложения создаю DataSet в который добвляю 2 DataTable: dtOrder и dtClient дататэйблы заполняю следующим образом: Код: c# 1. 2. 3. 4. 5.
анологично и с dtClient теперь хочу заполнить грид полями из Orders и соответствующими им полями из Client Ненужные для отображения поля в гиде планирую сделать .visible = false В процессе работы пользователь может добавлять/удалять записи из грида. При соответствующем действии пользователя на изменение состояния строки в дататэйбле повешу обработчик в котором планирую обновлять базу путем вызова m_DataAdapter.Update в дотнете и си шарпе я новичок. Прошу не кидаться камнями. В полне допускаю что мною используемая концепция извратная. Подскажите как правильно работать с такой задачей? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 08:41 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
ScherbakovAlex Kuznetsov, Я просто не совсем понимаю как потом обновлять данные на сервере. вкратце задача вот в чем: есть база из 3 таблиц: Orders (тут хранятся номера заявок, дата создания, флаги о выполнении заявки, дата выполнения заявки) Client (тут хранятся идентификаторы клиентов, наименования и реквизиты) Stage (тут хранятся номера этапов заявки, суммы этапов, флаги и даты выполнения) таблицы связаны следующим образом: Orders и Client - связь один к одному Orders и Stege - связь один ко многим, т.е. заявка делится на несколько этапов И есть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента. Отображение данных в гриде и третьей таблицы Client пока опустил. В коде приложения создаю DataSet в который добвляю 2 DataTable: dtOrder и dtClient дататэйблы заполняю следующим образом: Код: c# 1. 2. 3. 4. 5.
анологично и с dtClient теперь хочу заполнить грид полями из Orders и соответствующими им полями из Client Ненужные для отображения поля в гиде планирую сделать .visible = false В процессе работы пользователь может добавлять/удалять записи из грида. При соответствующем действии пользователя на изменение состояния строки в дататэйбле повешу обработчик в котором планирую обновлять базу путем вызова m_DataAdapter.Update в дотнете и си шарпе я новичок. Прошу не кидаться камнями. В полне допускаю что мною используемая концепция извратная. Подскажите как правильно работать с такой задачей? из того что написано следует что редактировать следует Orders вот и работай с этой таблицей ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 08:49 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
pation, Согласен! В обработчике буду работать с этой таблицей. Вопрос по большей части был в том как отобразить в одной строке грида колонки из разных дататэйблов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 09:03 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Scherbakovpation, Согласен! В обработчике буду работать с этой таблицей. Вопрос по большей части был в том как отобразить в одной строке грида колонки из разных дататэйблов. DataGridViewComboBoxColumn ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 09:09 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
pation, я наверное непонятно выразился. мне нужно чтобы в гриде сначала шли колонки из dtOrders, а следом за ними колонки из dtClient Еще я неправильно указал сязь между этими таблицами. на самом деле Orders и Client - связь многие к одному. быть может сделать так: Код: c# 1. 2. 3. 4. 5. 6.
и уже её подгружать в грид, а в обработчике изменения состояния строки брать из изменяемой строки Orders_Id и удалять его из самой Orders? а потом уже делать Код: c# 1.
Такой подход не считается говнокодом? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 09:34 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
ScherbakovТакой подход не считается говнокодом?Подход? JOIN - это правильно, а вот Ваша реализация оставляет желать лучшего. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 10:19 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Scherbakov, задача простейшая и опсана в мсдн как типовая, джойнить тут ничего не надо ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 11:42 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
pationзадача простейшая и опсана в мсдн как типовая, джойнить тут ничего не надо Scherbakovесть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента В принципе да, ничего джойнить не надо. Грид должен отображать результат запроса Код: sql 1.
А для отображения наименование клиента следует использовать DataGridViewComboBoxColumn, как предлагалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 12:26 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
pation, поделитесь ссылкой на материал, где описана подобная задача, пожалуйста? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 12:30 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Scherbakovpation, поделитесь ссылкой на материал, где описана подобная задача, пожалуйста? лень искать смотри DataGridViewComboBoxColumn на мсдн ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 12:44 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
pation, И на этом спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 12:46 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Scherbakov, Поищи книгу Дэвид Сеппа "Microsoft ADO.NET". Она хоть и тсарая, но там хорошо разжевано именно про таблицы, адаптеры, связи и есть перевод на русский. Относительно DataGridViewComboBoxColumn совет довольно сомнительный. Для его реализации необходимо в отдельную таблицу загрузить всех контрагентов. Это хорошо пока количество контрагентов не станет измеряться десятками-сотнями тыщ: 1. жрет много памяти даже если вам надо пару ордеров по фильтру показать (либо на таблицу конрагентов грузить только тех, которые из числа тех, для которых действителен фильтр для ордеров, что тоже не так легко получится) 2. поиск по релейшину в большой таблице будет занимать все больше времени при росте дочерней таблицы контрагентов. DataGridViewComboBoxColumn хорош для случаев, когда подчиненная таблица невелика и является банальным справочником с малым количеством записей. Например, у контрагента может быть тип (юридическое лицо, физическое лицо, предприниматель) тогда для двух таблиц контраген-тип контрагента можно использовать эту технику. JOIN здесь предпочтительнее. Относительно отображения всех трех ваших таблиц в одном гриде тоже сомнения. Комбинация стандартная для всяких "orders" - накладные, счета etc. Делают, как правило, не один грид со всей этой кашей, а два. В первом dtOrder + dtClient, во втором, зависимом, dtStage по фильтру строки, только соответствующие активной строке из первого. ПС. То, что имеется в таблице в памяти колонка из другой таблицы (т.е. для SELECT использовался JOIN) совсем не обязывает вас при записи в БД реально апдейтить обе таблицы, достаточно апдейтить только главную. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 13:43 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
IAppleОтносительно DataGridViewComboBoxColumn совет довольно сомнительный. Для его реализации необходимо в отдельную таблицу загрузить всех контрагентов. Это хорошо пока количество контрагентов не станет измеряться десятками-сотнями тыщ: 1. жрет много памяти даже если вам надо пару ордеров по фильтру показать (либо на таблицу конрагентов грузить только тех, которые из числа тех, для которых действителен фильтр для ордеров, что тоже не так легко получится) 2. поиск по релейшину в большой таблице будет занимать все больше времени при росте дочерней таблицы контрагентов. не нужно советовать херню в данном кейсе join хуже, по всем показателям, и производительность и время, подумай почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 13:57 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
pation и время и занимаемая память ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 13:58 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
IApple, Спасибо за ответ! Я уже начал подобную предложенной тобой реализацию, так же со вторым гридом для дочерних записей. DataGridViewComboBoxColumn мне не совсем и подходит, а точнее совсем не подходит. Ну не нужен мне в гриде комбобокс. Не планируется у уже созданной записи менять контрагента, а заполнять комбобокс списком сотрудников, только ради того что потом для текущей записи в гриде в этом комбобоксе отображать контрагента этой заявки вот это уж действительно skyANAреализация оставляет желать лучшего. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 15:36 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Scherbakovа заполнять комбобокс списком сотрудников, только ради того что потом для текущей записи в гриде в этом комбобоксе отображать контрагента этой заявки Сам так делаю. Заполняешь по факту не комбобокс, а какой-нибудь DataTable, его вяжешь к ComboBoxColumn, указав правильно displaymember, valuemember и datasource. Все равно тебе так или иначе что-то да надо заполнять. А комбобокс автоматом все сразу увяжет по кодам. А чтоб нельзя было менять, делаешь столбец ридонли. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 17:22 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
ScherbakovAlex Kuznetsov, Я просто не совсем понимаю как потом обновлять данные на сервере. вкратце задача вот в чем: есть база из 3 таблиц: Orders (тут хранятся номера заявок, дата создания, флаги о выполнении заявки, дата выполнения заявки) Client (тут хранятся идентификаторы клиентов, наименования и реквизиты) Stage (тут хранятся номера этапов заявки, суммы этапов, флаги и даты выполнения) таблицы связаны следующим образом: Orders и Client - связь один к одному Orders и Stege - связь один ко многим, т.е. заявка делится на несколько этапов И есть форма с гридом, в котором надо отобразить дату создания заявки, номер заявки, наименование клиента. Отображение данных в гриде и третьей таблицы Client пока опустил. В коде приложения создаю DataSet в который добвляю 2 DataTable: dtOrder и dtClient skiped... Ну, в общем я тут манёхи поднакидал Вам проектец. Просто как пример того, что и как можно сделать... Думаю, что реализацию указания этапа для заявки сможете реализовать уже сами... Проект в VS2012. В решении проект БД (там просто три скрипта для создания таблиц), ну и собственно клиентская часть. Изучайте... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2013, 22:30 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, Большое человеческое спасибо! К сожалению на текущий момент пользуюсь VS2010, но лицензию vs2012 уже купили, так что в ближайшее время приступлю к изучению! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2013, 08:12 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
ScherbakovAlex Kuznetsov, Большое человеческое спасибо! К сожалению на текущий момент пользуюсь VS2010, но лицензию vs2012 уже купили, так что в ближайшее время приступлю к изучению!Пожалуйста. В принципе, то что у Вас VS2010 - не проблема, можно формочки открыть и там, ну а SQL скрипты тоже открываются в блокноте . Так что удачи... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2013, 08:36 |
|
заполнение datagridview из нескольких datatable
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, формочки я уже посмотрел) с скриптами создания таблиц тоже все понятно, благо кой-какой опыт работы с MS SQL Server и создания небольших БД имеется. вот только интерфейсы к ним писались под MFC. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2013, 08:48 |
|
|
start [/forum/topic.php?fid=20&msg=38304430&tid=1404463]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 269ms |
0 / 0 |