datagridview double click вывод данных

в datagridview вывел одну таблицу из базы данных. теперь при double Click-e на определенную строку нужно вывести данные в другую таблицу с выборкой. при клике на нужную строку необходимо получить значение конкретного столбца и по этому значению нужно сделать выборку. помогите пожалуйста разобраться как это сделать. выложу то, что пытался.

private void dataGridView2_CellDoubleClick(object sender, DataGridViewCellEventArgs e)   // Датагрид клик
    {
       

        DslamInfo info = new DslamInfo();  //  объявление формы, где должен отображаться данные второго датагрида
        info.Iptextbox.Text = dataGridView2.CurrentRow.Cells[2].Value.ToString(); // кликом на строку вывожу один столбец на текстбокс
       
        info.ShowDialog();
       displayGriddd();
   
    }
    public void displayGriddd()  //   этим методом пытаюсь передать значение одного датагрида на второй датагрид

    {
        DslamInfo info = new DslamInfo();
        MySqlCommand command = new MySqlCommand("SELECT sats.port, sats.dslam.id, dslam.ip FROM sats JOIN dslam ON dslam.id = sats.dslam_id WHERE sats.dslam_id = " + dataGridView2.CurrentRow.Cells[0].Value.ToString() + "", con);
        MySqlDataAdapter adapter = new MySqlDataAdapter();
        DataTable table = new DataTable();
        adapter.SelectCommand = command;
        table.Clear();
        adapter.Fill(table);
        info.dataGridView222.DataSource = command;
    }

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Frehzy

Если я правильно понял суть задачи, то вот решение (представил сразу в классе, чтобы было проще)

internal class DGVHelper<T>
{
    public int? Row { get; private set; }

    public int? Column { get; private set; }

    public DataGridView _dgv;

    public DGVHelper(DataGridView dataGridView)
    {
        _dgv = dataGridView;
    }

    public T GetIdBySelectedRow(string columnName)
    {
        Row = _dgv.CurrentCell?.RowIndex;
        if (Row is null)
            throw new NullReferenceException("Должна быть выделена хотя-бы одна строка.");

        Column = GetIndexByName(_dgv, columnName);
        if (Column is null)
            throw new NullReferenceException($"Не был найден столбец с именем {columnName}");

        return (T)Convert.ChangeType(_dgv.Rows[(int)Row].Cells[(int)Column].Value, typeof(T));
    }

    private int? GetIndexByName(DataGridView dgv, string name = "Id")
    {
        foreach (DataGridViewColumn column in dgv.Columns)
            if (column.Name.ToLower().Equals(name.ToLower()))
                return column.Index;

        return default;
    }
}

Привяжи к методу двойного клика создание экземпляра класса и вызов метода GetValueByColumnName

→ Ссылка
Автор решения: Mister junior
спасибо вам большое ! я вот по другому сделал, вроде бы работает, насколько это правильное решение не знаю .  ` private void button5_Click(object sender, EventArgs e)
    {
        port portShow = new port();
        
        con.Open();
        int id = Convert.ToInt32(dataGridView2.CurrentRow.Cells[1].Value);
        MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT dslam.id AS 'id', sats.port, sats.name, sats.surname, sats.phone FROM sats JOIN dslam ON sats.dslam_id = dslam.id WHERE dslam.id = " + dataGridView2.CurrentRow.Cells[1].Value.ToString() + "", con);
        DataSet dset = new DataSet();
        adapter.Fill(dset);
        portShow.dataGridViewPort.DataSource = dset.Tables[0];
        con.Close();
        portShow.ShowDialog();
    }`

работает, скажите, правильно так делать или уродство

→ Ссылка