Как я могу использовать контекстное меню правой кнопкой мыши на DataGridView? - PullRequest
3 голосов
/ 22 мая 2011

Я создал контекстное меню и связал его с моим элементом управления DataGridView. Однако я заметил, что когда я щелкаю правой кнопкой мыши по элементу управления, выбор в dataGridView не изменяется. Поэтому я не могу правильно извлечь строку в обработчике события контекста.

Любые предложения о том, как я мог бы сделать это?

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

Мне просто нужна информация о , как получить этот идентификатор , я могу справиться с удалением самостоятельно.

Ответы [ 3 ]

3 голосов
/ 16 января 2013
    private void dataGridViewSource_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button != MouseButtons.Right || e.RowIndex == -1 || e.ColumnIndex == -1) return;
        dataGridViewSource.CurrentCell = dataGridViewSource.Rows[e.RowIndex].Cells[e.ColumnIndex];
        contextMenuStripGrid.Show(Cursor.Position);
    }
1 голос
/ 22 мая 2011

Так вы можете отобразить контекстное меню и выбрать текущую ячейку, если щелкнуть ячейку.

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
        if (hit.Type == DataGridViewHitTestType.Cell)
        {
            dataGridView1.CurrentCell = dataGridView1[hit.ColumnIndex, hit.RowIndex];
            contextMenuStrip1.Show(dataGridView1, e.X, e.Y);
        }
    }
}

В обработчике события Click из вашего пункта меню проверьте dataGridView1.CurrentRow, чтобы узнать, какая строка выбрана в данный момент.,Например, если сетка связана с источником данных:

private void test1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    var item = dataGridView1.CurrentRow.DataBoundItem;
}

При тестировании этого кода убедитесь, что свойство DataGridView.ContextMenuStrip не установлено.

0 голосов
/ 22 мая 2011

Добавить

DataGridViewRow currentRow;
void DataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.RowIndex >= 0)
        currentRow = self.Rows[e.RowIndex];
    else
        currentRow = null;
}

Затем используйте currentRow в методе контекстного меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...