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

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

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

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

10.01.2017, 16:30. Просмотров 345. Ответов 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 из одной формы в другую
Посмотрите здесь:

Передача данных из одной формы в другую C#
Передача данных из одной формы в другую C#
C# .NET 4.x Передача данных из одной формы в другую
C# Передача из одной формы в другую
Передача данных из одной формы в другую C#
Передача данных из одной формы в другую C#
C# Передача переменной из одной формы в другую
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shogun31337
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
276 / 263 / 93
Регистрация: 04.08.2015
Сообщений: 678
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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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
3061 / 2976 / 1511
Регистрация: 20.04.2015
Сообщений: 5,487
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# Передача данных из одной формы в другую
Передача данных из одной формы в другую C#
Передача данных из одной формы, в другую C# .NET 4.x
Передача переменной из одной формы в другую C#
C# Передача с одной формы в другую и обратно

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

Или воспользуйтесь поиском по форуму:
Shogun31337
75 / 75 / 24
Регистрация: 02.11.2016
Сообщений: 245
Завершенные тесты: 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