Как получить конкретную ячейку в DataGridView при изменении выбора - PullRequest
3 голосов
/ 01 января 2009

Со списком у меня есть следующий код для извлечения выбранного элемента:

    private void inventoryList_SelectedIndexChanged(object sender, EventArgs e)
    {
        String s = inventoryList.SelectedItem.ToString();
        s = s.Substring(0, s.IndexOf(':'));
        bookDetailTable.Rows.Clear();
        ...
        more code
        ...
    }

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

Любая помощь очень ценится.

Ответы [ 2 ]

15 голосов
/ 01 января 2009

Я думаю, что это то, что вы ищете. Но если нет, надеюсь, это даст вам начало.

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    DataGridView dgv = (DataGridView)sender;

    //User selected WHOLE ROW (by clicking in the margin)
    if (dgv.SelectedRows.Count> 0)
       MessageBox.Show(dgv.SelectedRows[0].Cells[0].Value.ToString());

    //User selected a cell (show the first cell in the row)
    if (dgv.SelectedCells.Count > 0)
        MessageBox.Show(dgv.Rows[dgv.SelectedCells[0].RowIndex].Cells[0].Value.ToString());

    //User selected a cell, show that cell
    if (dgv.SelectedCells.Count > 0)
        MessageBox.Show(dgv.SelectedCells[0].Value.ToString());
}
0 голосов
/ 03 февраля 2018

Это еще один способ подойти к этому вопросу, используя имя столбца.

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
   var senderGrid = (DataGridView)sender;
   if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
   {
      if (e.ColumnIndex == dataGridView1.Columns["ColumnName"].Index)
      {
        var row = senderGrid.CurrentRow.Cells;
        string ID = Convert.ToString(row["columnId"].Value); //This is to fetch the id or any other info
        MessageBox.Show("ColumnName selected");
      }
   }
}

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

Form2 form2 = new Form2(ID);
form2.Show();
...