Форум программистов, компьютерный форум CyberForum.ru

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
 
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
#1

.NET 4.x Передача выбраной позиции в datagrid из одной формы в другую - C#

10.01.2017, 16:30. Просмотров 398. Ответов 20
Метки нет (Все метки)

Добрый день.
Интересует возможность передачи текущей выбранной позиции в datagrid (+ используется BindingSource, фактически все данные расположены по таблицам в БД MSSQL) расположенного на одной форме в другой datagrid другой формы.

В чем суть, на основной форме есть datagrid допустим со списком ФИО. Мы выбираем, например, вторую фамилию. Тогда на дополнительно открывающейся форме, в другом datagrid должны открыться все вещи, которыми владеет данное ФИО. Следовательно если мы выбираем третью фамилию в списке, то в дополнительной форме со своим datagrid будут уже данные по этой ФИО.
Внутри одной формы это удается реализовать связями (dataSet.Relations.Add), но при создании дополнительной формы, вторая форма не знает, какая позиция выбрана в datagrid на первой форме.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2017, 16:30     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую
Посмотрите здесь:

Передать подключение MySQL из одной формы в другую - C#
Доброго дня форумчане. почитал я FAQ http://www.cyberforum.ru/windows-forms/thread110436.html Но немного не понял. Как из одной формы...

Передать значение ячейки из одной формы в другую - C#
Есть две формы. На первой форме есть грид, на второй - комбобокс. Нужно, чтобы при нажатии на кнопку на первой форме значение ячейки...

Выборка данных из одной БД в другую - C#
Подскажите возможно ли это организовать в одном SQL запросе?

Скопировать таблицу из одной БД в другую БД - C#
Доброго времени суток. Я расширил свою программу и случилось так что все нужные данные находятся в разных местах. Мне нужно скопировать...

Доступ к DataGrid из второй формы - C#
Здравствуйте, возникла такая проблема: есть главная форма, в которой размещены множество MetroGrid(DataGrid), есть дочерняя форма, из...

Передача данных из базы в другую форму - C#
в общем есть форма, на форме есть кнопка, когда мы ее нажимаем то появляется вторая форма в которую нужно передать данные из первой......в...

Передача данных из DataGridView в другую форму - C#
Добрый день! Вопрос такой: создаю базу данных для мастерской. На главной форме есть datagridview который используется только для просмотра...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
10.01.2017, 18:26     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #2
Постмотрите вот тут! Все возможные варианты передачи параметров между формами там рассмотрены.
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 09:40  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #3
Изучал данный топик, но не увидел что-либо подходящего.
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 09:49     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #4
Цитата Сообщение от gmaksim Посмотреть сообщение
но не увидел что-либо подходящего
Ну как же так??? Как минимум, можно передать в форму 2 ИД выбранной в первой форме строки и отфильтровать записи при создании формы 2 в соответствии с этим значением.

Возможно, можно передать и DataRelation... Но на этот счет не могу ничего точно сказать...
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 10:13  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #5
Shogun31337
можно передать в форму 2 ИД выбранной в первой форме строки и отфильтровать записи при создании формы 2 в соответствии с этим значением.

Возможно, можно передать и DataRelation... Но на этот счет не могу ничего точно сказать...
Как можно взять и передать этот id? Как отфильтровать?
Я понимаю задачу, но изучая тот топик не смог придумать, что применить подходящее, поэтому и задался вопросом.
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 10:43     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #6
Цитата Сообщение от gmaksim Посмотреть сообщение
Как можно взять и передать этот id?
В коде формы 2 пишете:
C#
1
2
3
4
5
6
7
8
9
10
    public partial class Form2 : Form
    {
        int ID;
 
        public Form2(int _id)
        {
            InitializeComponent();
            ID = _id;
        }
    }
Открываете эту форму так (для примера):
C#
1
2
Form2 F2 = new Form2(dataGridView1.SelectedIndex);
F2.ShowDialog();
Все! Теперь форма 2 знает какая строка была выбрана в форме 1.

Цитата Сообщение от gmaksim Посмотреть сообщение
Как отфильтровать?
Создаете запрос на выборку, в условие отбора добавляете переданный параметр, делаете запрос к БД и используете полученный результат как Вам необходимо.

Добавлено через 6 минут
А можно делать выборку в первой форме (с этим, как я понимаю, у Вас проблем нет), а во вторую передавать набор записей (в виде DataTable, List или любой другой подходящей структуры), а в форме 2 использовать этот набор как DataSource для контролов. Это уже второй вариант!


Добавлено через 2 минуты
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Form2 F2 = new Form2(dataGridView1.SelectedIndex);
Подумал, что передавать SelectedIndex не самый лучший вариант... Правильнее будет передавать значение ключа выбранной записи. Т.к. значения ключа и SelectedIndex далеко не всегда совпадают, а выборку из БД нужно делать по значению из этой самой БД.
Igr_ok
306 / 293 / 101
Регистрация: 04.08.2015
Сообщений: 748
11.01.2017, 10:44     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #7
Как получить выделенную в гриде строку:
https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx
Полученная строка или только ID передается в конструктор формы 2.
Чтобы выделить строку в гриде, нужно задать значение для CurrentCell
C#
1
dataGridView1.CurrentCell = dataGridView1[0,0];
Чтобы найти в гриде нужную строку, пробегаемся в цикле по всем строкам, ища нужный ID. Полученный индекс используем для задания CurrentCell.
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 10:48  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #8
Shogun31337
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Подумал, что передавать SelectedIndex не самый лучший вариант...
А он и не дает, увы. Сделал все как вы сказали, и ошибка только в одном месте (приложил скриншот).
Цитата Сообщение от Shogun31337 Посмотреть сообщение
А можно делать выборку в первой форме (с этим, как я понимаю, у Вас проблем нет), а во вторую передавать набор записей (в виде DataTable, List или любой другой подходящей структуры), а в форме 2 использовать этот набор как DataSource для контролов. Это уже второй вариант!
К сожалению мало опыта, и слабо понимаю вас.
По факту вся информация в таблицах в БД, в программе исключительно dataset+bindingsource+datagrid, которыми "заливается" в разный datagrid своя таблица, а изменение в них данных происходит при клике на определенную строчку в определенной таблице (динамическая смена информация реализована при помощи dataset realtions).
Поэтому если верно понимаю, нужно делать как-то захват в основной форме, какая позиция выбрана и каким-то образом ее передать на дополнительную форму, причем так, чтобы во второй открытой форме уже была выбрана соответствующая связь.
Миниатюры
Передача выбраной позиции в datagrid из одной формы в другую  
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 11:19     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #9
Цитата Сообщение от gmaksim Посмотреть сообщение
А он и не дает, увы.
Аха! Это потому что у DataGridView нет такого свойства. Писал сразу тут код, перепутал! Значение, к примеру, из первой ячейки выделенной строки можно вот так получить:
C#
1
int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
Нужно только явно приводить к нужному типу.

Добавлено через 17 минут
Цитата Сообщение от gmaksim Посмотреть сообщение
Поэтому если верно понимаю, нужно делать как-то захват в основной форме, какая позиция выбрана и каким-то образом ее передать на дополнительную форму, причем так, чтобы во второй открытой форме уже была выбрана соответствующая связь.
Да, примерно так и есть! Только связи тут уже не важны, т.к. Вы отбираете записи самостоятельно по своим критериям. Выглядит это примерно таким образом... У нас есть 2 таблицы. В первой есть поля ИД и ФИО, а во второй ИД и Телефоны. Причем таблицы связаны между собой 1 ко многим по полю ИД. В первой форме у нас есть грид, в котором мы видим список ФИО, а при выборе одного человека нам нужно посмотреть данные о его телефонах во второй форме. Для этого мы узнаем ИД выделенного человека, передаем этот ИД во вторую форму, а там делаем запрос на выборку из второй таблицы с условием ИД(в таблице) = ИД(которое передали из первой формы). Вот как то так
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 11:34  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #10
Shogun31337
Аха! Это потому что у DataGridView нет такого свойства. Писал сразу тут код, перепутал! Значение, к примеру, из первой ячейки выделенной строки можно вот так получить:
int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
Нужно только явно приводить к нужному типу.
О, понял, добавил эту часть в основную часть формы после InitializeComponent();.
Указал свой datagrid, следовательно этим мы сохранили в id значение той ячейки, что выбрана в первой форме в определенном datagrid.
Далее идет вызов формы по нажатию кнопки:
C#
1
2
3
4
5
private void FORM2_Click(object sender, EventArgs e) 
 {
         FORM2 F2 = new FORM2(DATAGRID2.SelectedIndex);
         F2.ShowDialog();
}
Но опять на SelectedIndex та же самая ошибка, что прикладывал ранее (...does not contatin)
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 11:42     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #11
Цитата Сообщение от gmaksim Посмотреть сообщение
Но опять на SelectedIndex та же самая ошибка
Да, я же сказал, что у DataGridView нет свойства SelectedIndex. Поэтому ошибка и возникает!
Нужно передавать не SelectedIndex, а значение столбца выделенной строки, которое связывает 2 таблицы

Добавлено через 1 минуту
Нужное значение можно получить вот так:
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Аха! Это потому что у DataGridView нет такого свойства. Писал сразу тут код, перепутал! Значение, к примеру, из первой ячейки выделенной строки можно вот так получить:
C#
1
int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
Нужно только явно приводить к нужному типу.
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 12:11  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #12
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Нужно передавать не SelectedIndex, а значение столбца выделенной строки, которое связывает 2 таблицы
А как его передать уже в сам datagrid на вторую форму?
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 12:17     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #13
Цитата Сообщение от gmaksim Посмотреть сообщение
А как его передать уже в сам datagrid на вторую форму?
В сам грид его передавать не нужно! Его нужно передать в форму 2 и на его основе сделать выборку из таблицы 2. А набор данных, полученных в результате выборки, уже использовать как датасорс для датагрида.
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 12:26  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #14
Цитата Сообщение от Shogun31337 Посмотреть сообщение
В сам грид его передавать не нужно! Его нужно передать в форму 2 и на его основе сделать выборку из таблицы 2. А набор данных, полученных в результате выборки, уже использовать как датасорс для датагрида.
Дык внутри грида уже есть таблица со связями (в таблицу и от нее), по факту в нее и нужно это значение id передать. Зачем городить еще один грид, брать откуда-то данные и фильтровать их там?
Просто не понимаю, как именно обозначить внутри грида, что выбран такой-то id.
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 12:39     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #15
Цитата Сообщение от gmaksim Посмотреть сообщение
внутри грида уже есть таблица со связями
Внутри грида ничего нет!!! К гриду можно привязать таблицу через свойство DataSource. А можно к этому свойству привязать не таблицу из БД, а запрос! Тогда грид будет отображать не все записи из таблицы, а только отобранные.
Цитата Сообщение от gmaksim Посмотреть сообщение
Зачем городить еще один грид
Ничего городить не нужно! Нужно просто привязать к существующему гриду новый набор данных!
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 12:45  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #16
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Внутри грида ничего нет!!! К гриду можно привязать таблицу через свойство DataSource. А можно к этому свойству привязать не таблицу из БД, а запрос! Тогда грид будет отображать не все записи из таблицы, а только отобранные.
Я понимаю эту мысль, но внутри формы есть еще dataset relations, который еще имеет вложенность в зависимости от связи, именно поэтому я делаю упор на то, чтобы в текущее представление значение передать, а не создавать новое, иначе опять разрушается текущая структура.
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 13:00     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #17
Цитата Сообщение от gmaksim Посмотреть сообщение
иначе опять разрушается текущая структура
Ничего не разрушится. Структура БД от этого не изменится!

Если Вам так не хочется делать запросы к БД (что рано или поздно все равно потребуется) можете попробовать сделать Датасет статическим и во вторую форму передавать ссылку на первую! Тогда можно будет отображать данные в гриде второй формы, основываясь на datarelation. Т.е. как в рамках одной формы!
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 48
11.01.2017, 13:26  [ТС]     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #18
Возможно ли реализовать следующим образом?
В первой форме мы вставляем после InitializeComponent(); данный пункт:
C#
1
int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
Следовательно переменная id хранит значение ячейки dataGridView1.
Затем на форме два добавляем (также после InitializeComponent();):
C#
1
dataGridView2.Filter = "SELECT " + id + "FROM Tables2";
Но встает два вопроса:
1. Корректно ли это, будет работать (+ я не совсем уверен, что запрос select id from tables2 имеет корректный синтаксис)?
2. Как глобально передать/сохранить значение переменой id, ибо вторая форма о ней ничего не известно?
Даценд
Модератор
Эксперт .NET
3250 / 3165 / 1619
Регистрация: 20.04.2015
Сообщений: 5,824
11.01.2017, 13:51     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #19
Цитата Сообщение от gmaksim Посмотреть сообщение
Корректно ли это, будет работать (+ я не совсем уверен, что запрос select id from tables2 имеет корректный синтаксис)?
Зачем задавать вопросы на форуме, если все равно собираетесь с маниакальным упорством фильтровать DataGridView, вместо того, чтобы
Цитата Сообщение от Shogun31337 Посмотреть сообщение
набор данных, полученных в результате выборки, уже использовать как датасорс для датагрида
Цитата Сообщение от gmaksim Посмотреть сообщение
2. Как глобально передать/сохранить значение переменой id, ибо вторая форма о ней ничего не известно?
Нужно изучить основы объектно-ориентированного программирования прежде, чем приступать к созданию более-менее сложных программ на объектно-ориентированном языке.
Если лень/некогда/нехочу, можно глянуть Как передать данные из одной формы в другую
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 16:24     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую
Еще ссылки по теме:

Импорт из одной БД в другую по нажатию кнопки - C#
Написал на sql пару процедур, которые импортируют данные в нужные таблицы. Как мне оперировать ими в С# ? На C# раньше ничего не писал. ...

Вывод данных из одной таблицы в другую - C#
Не могу создать вывод данных из одной таблицы в другую. То есть заполняем таб1, после чего эти данные должны отображаться в таб2(тип...

MS Access Перенос данных из одной колонки в другую - C#
Кто может помочь?:( есть две таблицы в базе данных access,нужно из столбца одной таблицы перенести данные кодом во вторую таблицу

SQLite вставка из одной таблицы в другую - C#
Добрый день! Есть таблица A. В ней куча записей, мне надо выполнить копирование из этой таблицы в аналогичную B с выборкой. Вот код...

Скопировать строку из одной таблицы в другую - C#
всем привет) сразу перейду к делу. значит,есть форма : на этой вкладке показаны,как вы видите,"заключенные" сделки.нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Shogun31337
159 / 159 / 59
Регистрация: 02.11.2016
Сообщений: 592
Завершенные тесты: 1
11.01.2017, 16:24     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую #20
Цитата Сообщение от gmaksim Посмотреть сообщение
В первой форме мы вставляем после InitializeComponent(); данный пункт:
И зачем он там???
Цитата Сообщение от gmaksim Посмотреть сообщение
SELECT " + id + "FROM Tables2
Такой запрос точно не будет работать
Цитата Сообщение от gmaksim Посмотреть сообщение
Как глобально передать/сохранить значение переменой id, ибо вторая форма о ней ничего не известно?
Как это сделать я Вам уже целый день говорю!


Цитата Сообщение от Даценд Посмотреть сообщение
Если лень/некогда/нехочу, можно глянуть Как передать данные из одной формы в другую
С этого все и началось!!! Среди этих вариантов не нашлось подходящих!!!
Yandex
Объявления
11.01.2017, 16:24     .NET 4.x Передача выбраной позиции в datagrid из одной формы в другую
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru