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();
}`
работает, скажите, правильно так делать или уродство
