Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15

Передача данных между datagridview на разных формах

27.04.2015, 18:12. Показов 4180. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня вопрос, я использую таблицу Excel как базу данных которую правлю через datagridview. Вопрос заключается в чём? Есть 2 формы и 2 dgv. Для того что бы сделать форматирование или выполнить какие либо функции с первым dgv мне необходимо взять данные со второго dgv и тут начинаются фокусы. Читал статью про "7 часто задаваемых вопросов" и пробовал несколько методов из них но не тут то было. Если взять к примеру и создать объект класса второй формы и через него обращаться, на пример, к textbox то всё отлично работает.
C#
1
2
3
4
5
6
private void button1_Click_3(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            textBox5.Text = f2.textBox1.Text;
            
        }
Но в случае с dgv:
C#
1
textBox5.Text = f2.dgv2.Rows[1].Cells[1].Value.ToString();
Оно выбивает ошибку:"Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index".
Думал что это может быть из-за того что dgv на 2й форме не открыт, но 2 формы перед глазами и всё равно ошибка.
Открываю вторую форму при помощи .Show(); Читал про модальные окна и думаю что дело тут не в них.

Так же пробовал сделать при помощи пункта 2.7.2 "Создание отдельного класса с делегатом", я скорее всего ошибаюсь, но, там можно передать только значение типа string. Я пробовал комбинировать эти 2 метода и сразу из первой формы при помощи делегата и объекта класса 2й формы выдернуть значение из textbox то вроде всё вышло а вот из dgv не выходит.
C#
1
Data.EventHandler(f2.dgv2.Rows[1].Cells[1].Value.ToString());
Выдаёт туже ошибку.
Подскажите пожалуйста,как это можно сделать или что не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2015, 18:12
Ответы с готовыми решениями:

Передача данных между контролами на разных формах
Помогите передать текст из textBox1 в listBox1(которая на второй форме) PobedaForm st = new PobedaForm(); ...

передача данных между ListBox в разных формах
Всем доброго дня! Как мне реализовать на нажатие кнопки сравнивание значений в двух листах, находящихся на разных формах?? Например: ...

Связь между тремя datagridview на трёх разных формах
Ребят, нужна ваша помощь. Нужно связать три datagridview на трёх разных формах.. Первая форма "Бронирование" с таблицей...

17
84 / 84 / 55
Регистрация: 30.01.2015
Сообщений: 137
28.04.2015, 10:21
Нумерация строк и столбцов начинается с 0, скорей всего у тебя в dgv2 одна строка, поэтому ошибка
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
28.04.2015, 12:41  [ТС]
там не одна строка, и тут точно дело не в этом оно бы тогда не выдавало ошибку.
0
84 / 84 / 55
Регистрация: 30.01.2015
Сообщений: 137
28.04.2015, 16:07
у тебя в ошибке написано, что индекс вне диапазона
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
28.04.2015, 17:52
попробуй как то так
C#
1
frm2.textBox2.Text = dataGridView1[y, n].Value.ToString();
где указываешь "y" это столбец а "n" строка как то так
0
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
28.04.2015, 20:25
Цитата Сообщение от Infeltrace Посмотреть сообщение
C#
1
Form2 f2 = new Form2(); textBox5.Text = f2.textBox1.Text;
Цитата Сообщение от Infeltrace Посмотреть сообщение
всё отлично работает.
потому, что считываешь из textBox1 формы f2 сразу при открытии формы, а string может быть null
Цитата Сообщение от Infeltrace Посмотреть сообщение
Но в случае с dgv
тут возникает вопрос: как происходит заполнение dgv
если так же пытаешься получить при открытии - убедись, что таблица заполнена!
иначе - пытаешься получить данные из строки которой ещё нет!
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
28.04.2015, 21:18  [ТС]
Цитата Сообщение от СвободныйНик Посмотреть сообщение
как происходит заполнение dgv
dvg как первый так и второй заполняются из Excel файла.
Цитата Сообщение от СвободныйНик Посмотреть сообщение
если так же пытаешься получить при открытии - убедись, что таблица заполнена!
я писал при создании темы, но повторюсь ещё раз. Думал что дело в этом но нет, так как у меня перед глазами обе открытые формы, обе с dgv и в dgv открыты таблицы. И всё равно выдаёт ошибку.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.04.2015, 21:36
Я так понимаю dgv2 открыта, в смысле public
Перед
C#
1
textBox5.Text = f2.dgv2.Rows[1].Cells[1].Value.ToString();
добавьте
C#
1
2
int r = f2.dgv2.Rows.Count;
int c = f2.dgv2.Columns.Count;
поставьте точку останова и гляньте чему равны r и c.
Дальше станет понятней с чем разбираться
0
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
28.04.2015, 21:38
Цитата Сообщение от Infeltrace Посмотреть сообщение
я писал при создании темы, но повторюсь ещё раз. Думал что дело в этом но нет, так как у меня перед глазами обе открытые формы, обе с dgv и в dgv открыты таблицы. И всё равно выдаёт ошибку.
в другом проблем не вижу, да и ошибка ссылается на отсутствие индекса этой строки!
вот рабочий код для сравнения.
в главной форме (MainForm) пишем:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public MainForm()
{
    InitializeComponent();
    //
    // TODO: Add constructor code after the InitializeComponent() call.
    //
}
void Button1Click(object sender, EventArgs e)
{            
    Form2 f2 = new Form2();
    f2.Show();
    textBox1.Text = f2.dataGridView1.Rows[1].Cells[1].Value.ToString();
}
в дочерней (Form2):
C#
1
2
3
4
5
6
void Form2Load(object sender, EventArgs e)
{
    dataGridView1.Rows.Add("123","654");
    dataGridView1.Rows.Add("wref","sd4f");
    dataGridView1.Rows.Add("t44","65re4");
}
в textBox1 получаю данные строки dataGridView1.Rows[1].Cells[1].Value
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
29.04.2015, 18:37  [ТС]
У меня есть подозрение что это из-за того что у меня данные в dgv загружаются не в ручную а из Excel, ибо всё написано так же как выше предложенный вариант и всё равно выдаёт ошибку. Может ли ошибка быть связана с Excel загрузкой?
0
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
29.04.2015, 18:55
Цитата Сообщение от Infeltrace Посмотреть сообщение
Может ли ошибка быть связана с Excel загрузкой?
если
Цитата Сообщение от Infeltrace Посмотреть сообщение
C#
1
textBox5.Text = f2.dgv2.Rows[1].Cells[1].Value.ToString();
выполняется до того, как загрузится dgv, то да.
если не военная тайна - выложи больше кода: что... как... когда... в какой момент идёт загрузка dgv, когда выполняется запрос к строке dgv...
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
29.04.2015, 19:21  [ТС]
Вот, без проблем только путь к файлу прописать надо, а то там у меня беда с путём вышла. А так на button1 написано вроде всё тоже самое. Вторая форма и dgv2 сверху "Правка -> Машины". После того как оно открыло мне оба dgv я пытаюсь сделать передачу и у меня вылетает ошибка.
Projects.rar
Вложения
Тип файла: rar dgv and excel vol1.rar (78.0 Кб, 5 просмотров)
Тип файла: xls test1.xls (21.0 Кб, 3 просмотров)
0
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
29.04.2015, 20:32
Infeltrace, у меня всё заработало как только за комментировал 2 строки в Form2.cs, это:
22 //Form1 f1 = new Form1();
и
63 //f1.ShowDialog();
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
29.04.2015, 20:55  [ТС]
СвободныйНик, сделал тоже самое всё равно выдаёт ошибку. Боже, как этот бред лечится?)
0
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
29.04.2015, 21:11
попробуй это (перекомпилировал)
dgv and excel vol1.rar
1
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
29.04.2015, 21:15  [ТС]
СвободныйНик, удивительно, но работает Оо) спаибо большое! в чём секрет?)
0
 Аватар для СвободныйНик
191 / 180 / 114
Регистрация: 28.07.2013
Сообщений: 610
29.04.2015, 21:20
Цитата Сообщение от Infeltrace Посмотреть сообщение
в чём секрет?)
не знаю, видать где то при компиляции какой то сбой был, - создал новый проект с нужными формами и всё туда как текст скопировал и... всё гуд
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 15
29.04.2015, 21:30  [ТС]
СвободныйНик, *FACEPALM*
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2015, 21:30
Помогаю со студенческими работами здесь

Передача жанных между listView на разных формах
на Form1 имеется listView1 в которым отабражены процессы(имя, pID, расположение) listView1.Visible = false; ...

Сравнение данных из ячеек DataGridView на двух разных формах
Есть 2 формы, на одной есть DataGridView и на второй - DataGridView. Нужно сравнить данные из определенной колонки в DataGridView на одной...

Передача данных между формами разных проектов
Добрый день. Вот такая проблемка. Есть решение (Solution), в решении есть 3 проекта: params, params_3, params_4 (см.вложение) из...

Передача данных DataGridView между формами
есть форма с datagridview в которую через dataadaper и datatable грузятся данные из бд. пользователь удаляет лишние строки из datagridview...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru