Получить значение правой кнопкой мыши на ячейке c# DataGridView - PullRequest
1 голос
/ 13 января 2020

Я работаю со следующей DataGridView :

enter image description here

Я пытаюсь получить значение розовая ячейка, когда я щелкаю правой кнопкой мыши на черной ячейке , но я не знаю, как именно это сделать, потому что это дает мне значение текущей ячейки (синяя ячейка) (код):

private void abrirIncidencia_Click(object sender, EventArgs e)
{
    int currentRowIndex = dataGridView1.CurrentRow.Index;

    string nd = dataGridView1.CurrentCell.Value.ToString();
    System.Diagnostics.Debug.WriteLine("Cell seleccionada: " + nd + " current row es: " + currentRowIndex);
    string nOrdFab = dataGridView1.Rows[currentRowIndex].Cells[1].Value.ToString();

    SqlConnection conexion = new SqlConnection(ConfigurationManager.AppSettings["ggConnectionString"].ToString());

    String strSql = "";
    SqlCommand comando;
    SqlDataAdapter adapter;

    catch (Exception ex)
    {
        MessageBox.Show(Form.ActiveForm, "Error: " + ex.ToString());
    }
}

И этот метод доступен с помощью ToolStripMenuItem :

        this.abrirIncidencia.Name = "abrirIncidencia";
        this.abrirIncidencia.Size = new System.Drawing.Size(227, 22);
        this.abrirIncidencia.Text = "Abrir Incidencia";
        this.abrirIncidencia.Click += new System.EventHandler(this.abrirIncidencia_Click);

Как получить значение розовой ячейки, если щелкнуть правой кнопкой мыши черную ячейку?

РЕДАКТИРОВАТЬ : В этом методе я использую EventsArgs, но если я пытаюсь изменить на MouseEventArgs , сообщите мне следующую ошибку:

Нет служебных данных, соответствующих ' openClick_Incidence 'соответствует' System.EventHandler '

Заранее спасибо!

1 Ответ

1 голос
/ 13 января 2020

Вместо этого вы должны обработать событие CellClick объекта DataGridView:

dataGridView1.CellClick += New DataGridViewCellEventHandler(dataGridView1_CellClick)

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

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
    try {
        string nd = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
        System.Diagnostics.Debug.WriteLine("Cell seleccionada: " + nd + " current row es: " + e.RowIndex);
        string nOrdFab = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();

        SqlConnection conexion = new SqlConnection(ConfigurationManager.AppSettings["ggConnectionString"].ToString());

        String strSql = "";
        SqlCommand comando;
        SqlDataAdapter adapter;

    } catch (Exception ex)
    {
        MessageBox.Show(Form.ActiveForm, "Error: " + ex.ToString());
    }
}

Было бы также полезно удалить Попробуйте Catch, как только этот код заработает, или, по крайней мере, перехватывайте только внешние ошибки, возникающие в SqlAdapter. Кроме того, если ваши столбцы создаются в конструкторе, в вашей форме будет поле для каждого столбца, например IDDataGridViewTextboxColumn, для которого вы можете получить доступ к индексу типа IDDataGridViewTextboxColumn.Index, чтобы упростить и уточнить, к какому столбцу вы обращаетесь. Это сделало бы объявление nOrdFab намного более понятным; например:

string nOrdFab = dataGridView1.Rows[e.RowIndex].Cells[IDDataGridViewTextboxColumn.Index].Value.ToString();

РЕДАКТИРОВАТЬ: Если вы пытаетесь выполнить работу в обработчике ContextMenuStrip, вам все равно нужно обработать событие CellClick, чтобы установить от текущей ячейки до той, которая была нажата правой кнопкой мыши, но для обработки события ToolStripMenuItem's Click необходимо снова использовать свойство CurrentCell.

Обработчик CellClick:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
    if (e.Button == MouseButtons.Right && e.RowIndex >= 0) {
        dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    }
}

Затем обработчик пункта контекстного меню:

private void abrirIncendia_Click(object sender, EventArgs e) {
    try {
        string nOrdFab = dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value.ToString();

        SqlConnection conexion = new SqlConnection(ConfigurationManager.AppSettings["ggConnectionString"].ToString());

        String strSql = "";
        SqlCommand comando;
        SqlDataAdapter adapter;

    } catch (Exception ex)
    {
        MessageBox.Show(Form.ActiveForm, "Error: " + ex.ToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...