Member 13815395 Ответов: 1

Как получить связанные данные в datagridview2 в новой форме, когда строка выбирается в datagridview1 в первой форме


Таким образом, в основном у меня есть две оконные формы, в первой форме у меня есть мой datagridview1, который показывает данные из базы данных, я хотел бы выскочить еще один datagridview2 в новой форме 2, который покажет связанные данные в соответствии с строкой datagridview1, которую я щелкнул. Возможно ли это сделать? Я сделал создание datagridview1 и хотел бы показать его связанные данные в форме datagridview form2. Например, у меня есть [id, name, location], отображаемый в form1, и когда я выбираю строку, form2 выскакивает и отображает [types, date_installed], причем оба id = одинаковы.

ps: я уже создал класс с именем myClass, который содержит строку подключения к моей базе данных.

Вот мои коды в форме 1:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Oracle.DataAccess.Client;

namespace MyTask
{
    public partial class Form1 : Form
    {
        private myClass myCls;
       
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            myCls = new myClass();
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = myCls.QueryData(@"select * from my_database ordered by database_id);

            dataGridView1.Refresh();

        }
 private void button1_Click(object sender, EventArgs e)
        {
           
        }

        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
             Form2 form2 = new Form2();
            form2.Show();
            form2.Refresh();
            dataGridView2.DataSource = dataGridView1.SelectedRows
            dataGridView2.Refresh();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
    }
}


Что я уже пробовал:

Ну, я попробовал это в своем dataGridView1...

private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
             Form2 form2 = new Form2();
            form2.Show();
            form2.Refresh();
            dataGridView2.DataSource = dataGridView1.SelectedRows
            dataGridView2.Refresh();
        }

1 Ответов

Рейтинг:
2

OriginalGriff

Проблема в том, что все, что находится в Form2, является его "собственностью", и ваша "родительская форма" не должна иметь к нему доступа. Если Form1 может получить доступ к элементам управления Form2, то вы не можете вносить какие-либо изменения в Form2 в будущем, не рассматривая очень тщательно, что это может повлиять на существующий код в Form1, Form3 или что-то еще, что может использовать Form2!

Вместо этого используйте свойства и / или конструкторы в Form2, чтобы передать информацию и позволить ей заниматься отображением того, что она хочет, как она хочет.
Видеть здесь: Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Все, что вам нужно передать Form2, - это значение ID: он собирает всю необходимую информацию из БД и отображает ее без необходимости Form1 знать, как она работает:

private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
    {
    DataGridView dgv = sender as DataGridView;
    if (dgv != null && e.RowIndex >= 0)
        {
        int id = (int)dgv.Rows[e.RowIndex].Cells["ID"].Value;
        Form2 form2 = new Form2(id);
        form2.Show();
        }
    }
Или
private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
    {
    DataGridView dgv = sender as DataGridView;
    if (dgv != null && e.RowIndex >= 0)
        {
        int id = (int)dgv.Rows[e.RowIndex].Cells["ID"].Value;
        Form2 form2 = new Form2();
        form2.ID = id;
        form2.Show();
        }
    }