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

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

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

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

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

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

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

Передача значения из одной формы в другую - C#
На form1 стоит чекбокс (чекед). Я поставил условие при закрытиии form1 (FormClosed), чтоб DataGridView на form2 стал visible=true;. ...

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

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

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

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

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

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

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

Возможно, можно передать и DataRelation... Но на этот счет не могу ничего точно сказать...
Как можно взять и передать этот id? Как отфильтровать?
Я понимаю задачу, но изучая тот топик не смог придумать, что применить подходящее, поэтому и задался вопросом.
0
Shogun31337
162 / 162 / 61
Регистрация: 02.11.2016
Сообщений: 608
Завершенные тесты: 1
11.01.2017, 10:43 #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 далеко не всегда совпадают, а выборку из БД нужно делать по значению из этой самой БД.
1
Igr_ok
310 / 297 / 103
Регистрация: 04.08.2015
Сообщений: 764
11.01.2017, 10:44 #7
Как получить выделенную в гриде строку:
https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx
Полученная строка или только ID передается в конструктор формы 2.
Чтобы выделить строку в гриде, нужно задать значение для CurrentCell
C#
1
dataGridView1.CurrentCell = dataGridView1[0,0];
Чтобы найти в гриде нужную строку, пробегаемся в цикле по всем строкам, ища нужный ID. Полученный индекс используем для задания CurrentCell.
1
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 54
11.01.2017, 10:48  [ТС] #8
Shogun31337
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Подумал, что передавать SelectedIndex не самый лучший вариант...
А он и не дает, увы. Сделал все как вы сказали, и ошибка только в одном месте (приложил скриншот).
Цитата Сообщение от Shogun31337 Посмотреть сообщение
А можно делать выборку в первой форме (с этим, как я понимаю, у Вас проблем нет), а во вторую передавать набор записей (в виде DataTable, List или любой другой подходящей структуры), а в форме 2 использовать этот набор как DataSource для контролов. Это уже второй вариант!
К сожалению мало опыта, и слабо понимаю вас.
По факту вся информация в таблицах в БД, в программе исключительно dataset+bindingsource+datagrid, которыми "заливается" в разный datagrid своя таблица, а изменение в них данных происходит при клике на определенную строчку в определенной таблице (динамическая смена информация реализована при помощи dataset realtions).
Поэтому если верно понимаю, нужно делать как-то захват в основной форме, какая позиция выбрана и каким-то образом ее передать на дополнительную форму, причем так, чтобы во второй открытой форме уже была выбрана соответствующая связь.
0
Миниатюры
Передача выбраной позиции в datagrid из одной формы в другую  
Shogun31337
162 / 162 / 61
Регистрация: 02.11.2016
Сообщений: 608
Завершенные тесты: 1
11.01.2017, 11:19 #9
Цитата Сообщение от gmaksim Посмотреть сообщение
А он и не дает, увы.
Аха! Это потому что у DataGridView нет такого свойства. Писал сразу тут код, перепутал! Значение, к примеру, из первой ячейки выделенной строки можно вот так получить:
C#
1
int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
Нужно только явно приводить к нужному типу.

Добавлено через 17 минут
Цитата Сообщение от gmaksim Посмотреть сообщение
Поэтому если верно понимаю, нужно делать как-то захват в основной форме, какая позиция выбрана и каким-то образом ее передать на дополнительную форму, причем так, чтобы во второй открытой форме уже была выбрана соответствующая связь.
Да, примерно так и есть! Только связи тут уже не важны, т.к. Вы отбираете записи самостоятельно по своим критериям. Выглядит это примерно таким образом... У нас есть 2 таблицы. В первой есть поля ИД и ФИО, а во второй ИД и Телефоны. Причем таблицы связаны между собой 1 ко многим по полю ИД. В первой форме у нас есть грид, в котором мы видим список ФИО, а при выборе одного человека нам нужно посмотреть данные о его телефонах во второй форме. Для этого мы узнаем ИД выделенного человека, передаем этот ИД во вторую форму, а там делаем запрос на выборку из второй таблицы с условием ИД(в таблице) = ИД(которое передали из первой формы). Вот как то так
1
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 54
11.01.2017, 11:34  [ТС] #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)
0
Shogun31337
162 / 162 / 61
Регистрация: 02.11.2016
Сообщений: 608
Завершенные тесты: 1
11.01.2017, 11:42 #11
Цитата Сообщение от gmaksim Посмотреть сообщение
Но опять на SelectedIndex та же самая ошибка
Да, я же сказал, что у DataGridView нет свойства SelectedIndex. Поэтому ошибка и возникает!
Нужно передавать не SelectedIndex, а значение столбца выделенной строки, которое связывает 2 таблицы

Добавлено через 1 минуту
Нужное значение можно получить вот так:
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Аха! Это потому что у DataGridView нет такого свойства. Писал сразу тут код, перепутал! Значение, к примеру, из первой ячейки выделенной строки можно вот так получить:
C#
1
int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
Нужно только явно приводить к нужному типу.
0
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 54
11.01.2017, 12:11  [ТС] #12
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Нужно передавать не SelectedIndex, а значение столбца выделенной строки, которое связывает 2 таблицы
А как его передать уже в сам datagrid на вторую форму?
0
Shogun31337
162 / 162 / 61
Регистрация: 02.11.2016
Сообщений: 608
Завершенные тесты: 1
11.01.2017, 12:17 #13
Цитата Сообщение от gmaksim Посмотреть сообщение
А как его передать уже в сам datagrid на вторую форму?
В сам грид его передавать не нужно! Его нужно передать в форму 2 и на его основе сделать выборку из таблицы 2. А набор данных, полученных в результате выборки, уже использовать как датасорс для датагрида.
0
gmaksim
5 / 5 / 0
Регистрация: 09.12.2016
Сообщений: 54
11.01.2017, 12:26  [ТС] #14
Цитата Сообщение от Shogun31337 Посмотреть сообщение
В сам грид его передавать не нужно! Его нужно передать в форму 2 и на его основе сделать выборку из таблицы 2. А набор данных, полученных в результате выборки, уже использовать как датасорс для датагрида.
Дык внутри грида уже есть таблица со связями (в таблицу и от нее), по факту в нее и нужно это значение id передать. Зачем городить еще один грид, брать откуда-то данные и фильтровать их там?
Просто не понимаю, как именно обозначить внутри грида, что выбран такой-то id.
0
Shogun31337
162 / 162 / 61
Регистрация: 02.11.2016
Сообщений: 608
Завершенные тесты: 1
11.01.2017, 12:39 #15
Цитата Сообщение от gmaksim Посмотреть сообщение
внутри грида уже есть таблица со связями
Внутри грида ничего нет!!! К гриду можно привязать таблицу через свойство DataSource. А можно к этому свойству привязать не таблицу из БД, а запрос! Тогда грид будет отображать не все записи из таблицы, а только отобранные.
Цитата Сообщение от gmaksim Посмотреть сообщение
Зачем городить еще один грид
Ничего городить не нужно! Нужно просто привязать к существующему гриду новый набор данных!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 12:39
Привет! Вот еще темы с ответами:

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

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

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

Передача данных из одной формы в другую - PHP
Подскажите пожалуйста... Есть 2 формы на разных страницах. 1) Форма 1(скриншот) Во вложении 2) Форма 2(скриншот) Во вложении ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.01.2017, 12:39
Ответ Создать тему
Опции темы

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