powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как передать в dataGridView2.DataSource массив из DataRow ?
21 сообщений из 21, страница 1 из 1
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38314787
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как передать в dataGridView2.DataSource массив состоящий из DataRow, который получился в результате выполнения функции GetChildRows?
Вот на чем я остановился:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace move_datagride
{
    public partial class Form1 : Form
    {
        SqlConnection cn = new SqlConnection("Data Source=PC_LOCAL;Initial Catalog=Northwind;User ID=visual");
        SqlDataAdapter da;
        DataSet ds;
        string strSQL = "select * from Employees; select * from Orders;";
        DataRelation rel;
        public Form1()
        {
            InitializeComponent();
            da = new SqlDataAdapter(strSQL, cn);
            ds = new DataSet();
            da.TableMappings.Add("Table", "Employees");
            da.TableMappings.Add("Table1", "Orders");
            da.Fill(ds);
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "Employees";
            rel = new DataRelation("Заказы", ds.Tables["Employees"].Columns["EmployeeID"], ds.Tables["Orders"].Columns["EmployeeID"]);
            ds.Relations.Add(rel);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.BindingContext[ds, "Employees"].Position -= 1;
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            dataGridView1.BindingContext[ds, "Employees"].Position += 1;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.DataBindings.Add("Text", ds, "Employees.FirstName");
            textBox2.DataBindings.Add("Text", ds, "Employees.LastName");
        }

        private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
        {
            DataRowView dr = dataGridView1.BindingContext[ds, "Employees"].Current as DataRowView;
            dataGridView2.DataSource = dr.Row.GetChildRows("Заказы");
        }
    }
} 


А вот что из этого вышло:
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38314788
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. получается что DataSourse подхватила свойства каждого элемента массива, можно ли как нить крутануть что бы отображалось как норм table, мне где то на глаза попадался там вроде как через какое то приведение типа и при помощи метода GetValue но блин чет немогу его опять найти.
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38314808
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это стандартная бд northwind, кто в курсе поля в таблице Orders выглядят иначе, по количеству элементов в подчиненной табл. Orders отбирает правильно но по содержанию берутся свойства не те
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38314916
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007Как передать в dataGridView2.DataSource массив состоящий из DataRow, который получился в результате выполнения функции GetChildRows?
Вы DataRelation определяли сугубо из "внутренней красоты"?
Почему не используете его в качестве источника данных дочерней формы.
Добавьте в конструктор формы что-то наподобие
Код: c#
1.
2.
dataGridView2.DataSource = ds;
dataGridView3.DataMember = "Employees.Заказы"; // ссылка на задекларированный DataRelation


И прибейте dataGridView1_CurrentCellChanged - он Вам не понадобится.

Вообще-то, по моему скромному мнению, использовать в-лоб DataSet в качестве источника данных визуальных компонентов - не очень хорошая идея. Для этого гораздо лучще подходит более универсальное и более функциональное средство - BindingSource.
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38314951
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mv, спасибо большое очень познавательно, т.к. я недавно начал изучать C# хотелось бы изучить все варианты развития ситуаций, к сожалению детальной литературы маловато, даже msdn на который все так любят ссылатся показался мне каким то мутным, поверхностным. До этого изучал Delphi там с этим все четко и понятно, учебников много, из них полных пособий хватает.
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315013
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mv, ксиаим ваш вариант почему то недоработает "Список потомков для поля Заказы создать нельзя"
писал так :
Код: c#
1.
2.
3.
4.
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Employees";
dataGridView2.DataSource = ds;
dataGridView2.DataMember = "Employees.Заказы";
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315150
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007sphinx_mv, ксиаим ваш вариант почему то недоработает "Список потомков для поля Заказы создать нельзя"
писал так :
Код: c#
1.
2.
3.
4.
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Employees";
dataGridView2.DataSource = ds;
dataGridView2.DataMember = "Employees.Заказы";

"Меня терзают смутные сомнения" (с), что Вы случайно прибили строку, в которой ds.Relations.Add(rel);
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315202
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mv, ой кажись заработало, спасибо, я вот думаю если такая музыка (ну вроде все работает) то зачем этот bindingsourse ? Какие он еще дополнительные функции может предоставить ? и вообще где почитать какие именно свойства источника данных может предоставлять binding meneger ?
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315204
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007,
Хватит издеваться над собой и остальными.
К чему, ну к чему выгружать на клиента ВСЕ записи по работникам + ВСЕ записи по заказам?
А если записей работников 50 000 и заказов 200 000 ?
Эдак никаких волостей не напасёшься ( (С) Жорж Милославский - "Иван Васильевич меняет профессию"). В смысле памяти...

Выбирайте нужные записи работников, по событию изменения позиции в таблице работников, выбирайте из базы принадлежащие ему заказы.

Не надо идти "неправильным" путём...
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315207
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007sphinx_mv, ой кажись заработало, спасибо, я вот думаю если такая музыка (ну вроде все работает) то зачем этот bindingsourse ? Какие он еще дополнительные функции может предоставить ? и вообще где почитать какие именно свойства источника данных может предоставлять binding meneger ? Ну всё там-же в MSDN
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315259
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov, ткните плиз где можно почитать про правильный путь, ну то биш как правильно проектировать?
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315350
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007Alex Kuznetsov, ткните плиз где можно почитать про правильный путь, ну то биш как правильно проектировать?
А в GOOGLE Вас забанили?
И на хабр доступ закрыт?

Ну и наконец:
http://www.books.ru/razrabotka-9001489/
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315448
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭдак никаких волостей не напасёшься ( (С) Жорж Милославский - "Иван Васильевич меняет профессию"). В смысле памяти...

Ай молодца. В смысле цитаты, дюже как хороша.

авторА если записей работников 50 000 и заказов 200 000 ?
Если у меня на борту 8 - 16 Gb RAM, то этих волостей как у "дурака махорки". :)

Это к тому, что правильный подход/не правильный подход - понятия ой как относительные.
Просто помним, что технология ADO.NET - предполагает буферизацию выбранных из БД данных в ОЗУ.
А вот в каком собственно объеме делать эту самую буферизацию надо решать уже разработчику/архитектору/модельеру
по месту...
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315451
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2megazoid007

Один вопрос, просто любопытно.
А почему на форме не вижу такого компонента как BindingNavigator?
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315494
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovК чему, ну к чему выгружать на клиента ВСЕ записи по работникам + ВСЕ записи по заказам?
А если записей работников 50 000 и заказов 200 000 ?Для учебно -тестовых задач - пофиг!
База данных northwind ( 14500829 ) - cтандартный сэмпл для MSSQL...
Alex KuznetsovЭдак никаких волостей не напасёшься ( (С) Жорж Милославский - "Иван Васильевич меняет профессию"). В смысле памяти...

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

Опять же. Никто не запрещает "нарисовать" запрос, который при выполнении вернет ограниченный набор (например, 10-100-1000 записей) из "родительской" таблицы и все связанные с ними данные из "дочерних" таблиц. Это гораздо лучше, чем "положить" сервер кучей мелких запросов, когда по каждому изменению указателя на "родительский" идентификатор выполняются запросы к базе для получения "дочерних" записей... И не забываем про то, что пользователь может изменить что-то в "предыдущем" дочернем наборе данных, и с этими изменениями "что-то нужно делать" (с).
Alex KuznetsovНе надо идти "неправильным" путём...
В программировании нет "неправильных" путей.
В зависимости от данной конкретной ситуации (и данного конкретного проекта) есть пути, которые могут (но очень не факт) лучше подойти.
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315607
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ermak, sphinx_mv,
так-то да, Вы правы, если памяти на клиенте как у дурака махорки, да ограничение по выбору, да у вас толстый-претолстый канал, да сервера не нагружены, то конечно, можно делать и так как хочет автор, вот только нарисовано у него было:
megazoid007...
Код: sql
1.
2.
3.
...
string strSQL = "select * from Employees; select * from Orders;";
...

...
А если это вэб приложение? Тоже всё вытаскивать при каждом запросе?
И пофигу, что база учебная Northwind.
Надо сразу привыкать разрабатывать нормально.

Кстати, очень хорошо, что автор задаёт на форуме вопросы и спрашивая советов, пытаясь что-то делать, и сталкиваясь с трудностями, а не просто на шару.
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38315652
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovErmak, sphinx_mv,
так-то да, Вы правы, если памяти на клиенте как у дурака махорки, да ограничение по выбору, да у вас толстый-претолстый канал, да сервера не нагружены, то конечно, можно делать и так как хочет автор, вот только нарисовано у него было:
megazoid007...
Код: sql
1.
2.
3.
...
string strSQL = "select * from Employees; select * from Orders;";
...

...
А пофиг, что написано в запросе! :)
Топик-стартер озвучил свою непосредственную проблему - и текст использованого (в примере) запроса к ней НИКАКОГО прямого отношения не имеет. :)
Alex KuznetsovА если это вэб приложение? Тоже всё вытаскивать при каждом запросе?Вот когда у топик-стартера будет веб-приложение - тогда и поговорим... А до тех это - обсуждение сферического коня в жидком вакууме...
Тем более, что это Ваше возражение актуально очень не для любого веб-проекта - там вполне разные варианты и ситуации бывают...

При этом (я сильно подозреваю), что с принципиальной необходимостью ограничения набора выбираемых данных с сервера топик-стартер ознакомлен. Вы же не предполагаете, что при разработке приложений для работы с базами данных в Delphi используются какие-то "более другие" требования в этом плане... :)
Alex KuznetsovИ пофигу, что база учебная Northwind.
Надо сразу привыкать разрабатывать нормально.
Для учебно-исследовательско-тестовых "проЭктов" - это всего лишь "один из" и никак не "самый главный" аргумент!

Более того: в "учебных" и "исследовательских" проектах чем больше "говнокода", тем лучше. Это позволяет быстрее (самое главное, кстати, требование в этом случае) ознакомиться с конкретной конструкцией или функционалом, позволяя не сильно заморачиваться на "идеальной архитектуре".
У ТСа сейчас и стоит задача научиться использовать конструкции и инструментарий языка и среды. Если с этим будет "не все в порядке", то никакие "правильные" SQL-запросы не спасут. То есть - ВООБЩЕ. И тут даже "правильная" архитектура не поможет...

Ну, а когда придет время писать "на заказ", то и тут все до элементарного просто: либо сам научится писать "правильно" (набив синяки и шишки), либо "старшие товарищи" направят в нужном направлении... Либо (в самом плохои случае) бросит это "неблагодарное дело"... :)
Alex KuznetsovКстати, очень хорошо, что автор задаёт на форуме вопросы и спрашивая советов, пытаясь что-то делать, и сталкиваясь с трудностями, а не просто на шару.Ну, тут +100500
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38316395
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ermak, даже не знаю тут чисто на эмоциональном плане он меня раздражает, мне например нравится навигация по таблице просто скролам ,кликами, даблкликами, если делать кнопки навигации то свои "красивые", "большие" это как мне кажется как сейчас модно говорить "юзабилити".
sphinx_mv очень точно раскрыл мою ситуацию. ))
Рас народ завелся тогда подкину еще пару вопросов если не возражаете ))
Допустим есть основная форма на которой отображены данные какой нить основной сущности (таблица), по даблклику по записи в таблице или нажатию кнопки "Редактировать" планируется что бы запускалось модальное окно для редактирования данных, вопрос как организовать логику редактирования и сохранения изменений: объекты подключения и хранения выборки данных расположить на главной форме, а при создании дочерней просто указать ссылку на Owner а потом через неё общаться с главной форма (взять данные, оправить в базу по средством главной формы) , либо может написать класс который будет передавать данные и возвращать, а быть может быть у модального окна реализовать логику валиддата отправки на сервер ? что будет счится профессионально и признаком хорошего тона ?
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38316570
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007...
Допустим есть основная форма на которой отображены данные какой нить основной сущности (таблица), по даблклику по записи в таблице или нажатию кнопки "Редактировать" планируется что бы запускалось модальное окно для редактирования данных, вопрос как организовать логику редактирования и сохранения изменений: объекты подключения и хранения выборки данных расположить на главной форме, а при создании дочерней просто указать ссылку на Owner а потом через неё общаться с главной форма (взять данные, оправить в базу по средством главной формы) , либо может написать класс который будет передавать данные и возвращать, а быть может быть у модального окна реализовать логику валиддата отправки на сервер ? что будет счится профессионально и признаком хорошего тона ?Зависит от размера и архитектуры приложения.
В принципе вынесение редактирования отдельной записи в отдельное окно - это нормально.
Работа с редактируемой информацией, в данном случае, может быть организована несколькими способами:
1. Выбор записи по идентификатору для редактирования, непосредственно валидация и вызов сохранения информации - всё это может происходить непосредственно в форме редактирования - обычно подходит для небольших приложений.

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

3. Форма - просто отображалка и валидация ввода, работа с редактируемой записью сущности идёт посредством обращения к серверу приложений. Вся бизнес логика обработки данных лежит в сфере ответственности сервера приложений, хранение данных отделено от логики их обработки. Обычно используется для крупных решений, масштаба предприятия (ERP системы).

Естественно, что после того, как окно с редактируемой записью закрывается, то нужно обновить таблицу. Т.е. смысл в том, что форма, содержащая таблицу, не должна знать как редактировать конкретную запись, эта форма лишь вызывает форму редактирования.

На самом деле всё зависит от архитектуры решения, от того, насколько сложна база и сущности, с которыми приходится работать. А также немаловажен вопрос поддержки всего этого безобразия в будущем с учетом возможного развития системы.

Наверняка коллеги подкинут ещё идей по возможностям организации работы в данной ситуации.
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38317445
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov, все понятно, спасибо большое, очень помогли
...
Рейтинг: 0 / 0
Как передать в dataGridView2.DataSource массив из DataRow ?
    #38318032
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор даже не знаю тут чисто на эмоциональном плане он меня раздражает, мне например нравится навигация по таблице просто скролам ,кликами, даблкликами, если делать кнопки навигации то свои "красивые", "большие" это как мне кажется как сейчас модно говорить "юзабилити".


Понятно. Просто использование BindingNavigator'a, как мне кажется, прояснит основную суть BindingSource. "Вот такая загогулина получается". И конечно же наличие навигатора никак не ограничивает ваши потребности в навигации просто скроллами, кликами и т.д., а вот информировать пользователя о кол. строк в гриде и его текущей позиции в гриде как бы нужно
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как передать в dataGridView2.DataSource массив из DataRow ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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