Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
5 / 5 / 2
Регистрация: 09.12.2016
Сообщений: 54
.NET 4.x

Передача выбраной позиции в datagrid из одной формы в другую

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

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

В чем суть, на основной форме есть datagrid допустим со списком ФИО. Мы выбираем, например, вторую фамилию. Тогда на дополнительно открывающейся форме, в другом datagrid должны открыться все вещи, которыми владеет данное ФИО. Следовательно если мы выбираем третью фамилию в списке, то в дополнительной форме со своим datagrid будут уже данные по этой ФИО.
Внутри одной формы это удается реализовать связями (dataSet.Relations.Add), но при создании дополнительной формы, вторая форма не знает, какая позиция выбрана в datagrid на первой форме.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2017, 16:30
Ответы с готовыми решениями:

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

Передача данных из одной формы в другую
Сейчас пишу курсовую и нужно чтоб с Form2(там считываются данные с 3 textbox'a), данные передались в Form3(визуализацию).Прочитал тему...

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

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

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

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

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

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

Если Вам так не хочется делать запросы к БД (что рано или поздно все равно потребуется) можете попробовать сделать Датасет статическим и во вторую форму передавать ссылку на первую! Тогда можно будет отображать данные в гриде второй формы, основываясь на datarelation. Т.е. как в рамках одной формы!
1
5 / 5 / 2
Регистрация: 09.12.2016
Сообщений: 54
11.01.2017, 13:26  [ТС]
Возможно ли реализовать следующим образом?
В первой форме мы вставляем после 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, ибо вторая форма о ней ничего не известно?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
11.01.2017, 13:51
Цитата Сообщение от gmaksim Посмотреть сообщение
Корректно ли это, будет работать (+ я не совсем уверен, что запрос select id from tables2 имеет корректный синтаксис)?
Зачем задавать вопросы на форуме, если все равно собираетесь с маниакальным упорством фильтровать DataGridView, вместо того, чтобы
Цитата Сообщение от Shogun31337 Посмотреть сообщение
набор данных, полученных в результате выборки, уже использовать как датасорс для датагрида
Цитата Сообщение от gmaksim Посмотреть сообщение
2. Как глобально передать/сохранить значение переменой id, ибо вторая форма о ней ничего не известно?
Нужно изучить основы объектно-ориентированного программирования прежде, чем приступать к созданию более-менее сложных программ на объектно-ориентированном языке.
Если лень/некогда/нехочу, можно глянуть Как передать данные из одной формы в другую
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
11.01.2017, 16:24
Цитата Сообщение от gmaksim Посмотреть сообщение
В первой форме мы вставляем после InitializeComponent(); данный пункт:
И зачем он там???
Цитата Сообщение от gmaksim Посмотреть сообщение
SELECT " + id + "FROM Tables2
Такой запрос точно не будет работать
Цитата Сообщение от gmaksim Посмотреть сообщение
Как глобально передать/сохранить значение переменой id, ибо вторая форма о ней ничего не известно?
Как это сделать я Вам уже целый день говорю!


Цитата Сообщение от Даценд Посмотреть сообщение
Если лень/некогда/нехочу, можно глянуть Как передать данные из одной формы в другую
С этого все и началось!!! Среди этих вариантов не нашлось подходящих!!!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2017, 16:24
Помогаю со студенческими работами здесь

Передача данных из одной формы в другую
Подскажите пожалуйста: есть 2 формы (А и Б), в форме А объявлена переменная public string fio; и ей присвоено значение fio =...

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

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

Передача данных из одной формы в другую
Добрый день! Подскажите реально ли реализовать следующую задачу? У меня на сайте "А" есть страница с простенькой формой: 2 поля...

Передача сообщения с одной формы на другую
Здравствуйте, все те, кто решился помочь) Решил заняться написанием простенького чата, имеются 2 формы: админ панель и форма...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru