Добавить контекстное меню в виде таблицы данных в приложении winform - PullRequest
6 голосов
/ 17 ноября 2010

Как отобразить контекстное меню, если щелкнуть правой кнопкой мыши пункт меню в DataGridView? Я хотел бы добавить удаление в меню, чтобы можно было удалить всю строку. Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 17 ноября 2010

Вам нужно будет создать контекстное меню с опцией «удалить строку» в конструкторе.Затем назначьте свойство ContextMenuStrip DGV (представление таблицы данных) этому контекстному меню.

Затем дважды щелкните элемент строки удаления и добавьте следующий код:

DGV.Rows.Remove(DGV.CurrentRow);

.также необходимо добавить событие MouseUp для DGV, которое позволяет изменять текущую ячейку при щелчке правой кнопкой мыши по ней:

private void DGV_MouseUp(object sender, MouseEventArgs e)
{
    // This gets information about the cell you clicked.
    System.Windows.Forms.DataGridView.HitTestInfo ClickedInfo = DGV.HitTest(e.X, e.Y);

    // This is so that the header row cannot be deleted
    if (ClickedInfo.ColumnIndex >= 0 && ClickedInfo.RowIndex >= 0)

    // This sets the current row
    DataViewMain.CurrentCell = DGV.Rows[ClickedInfo.RowIndex].Cells[ClickedInfo.ColumnIndex];
}
3 голосов
/ 10 мая 2013

Я знаю, что этот вопрос довольно старый, но, возможно, кто-то еще будет использовать его.Для этого есть событие, CellContextMenuStripNeeded.Следующий код прекрасно работает для меня и кажется менее хакерским, чем решение MouseUp:

private void DGV_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DGV.ClearSelection();
        DGV.Rows[e.RowIndex].Selected = true;
        e.ContextMenuStrip = MENUSTRIP;
    }
}
3 голосов
/ 17 ноября 2010

Со ссылкой на Мигель ответ
Я думаю, что это будет легко реализовать вот так

    int currentRowIndex;
    private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
    {
        currentRowIndex = e.RowIndex;
    }  
    private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
    {    
        dataGridView1.Rows.Remove(dataGridView1.Rows[currentRowIndex]);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...