Щелкните правой кнопкой мыши, чтобы выбрать строку просмотра данных - PullRequest
8 голосов
/ 06 октября 2008

Как выбрать строку сетки данных при щелчке правой кнопкой мыши?

Ответы [ 6 ]

18 голосов
/ 02 июня 2009

Заставить его вести себя аналогично левой кнопке мыши? например,

private void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        dataGridView.CurrentCell = dataGridView[e.ColumnIndex, e.RowIndex];
    }
}
15 голосов
/ 06 октября 2008
    // Clear all the previously selected rows
    foreach (DataGridViewRow row in yourDataGridView.Rows)
    {
      row.Selected = false;
    }

    // Get the selected Row
    DataGridView.HitTestInfo info = yourDataGridView.HitTest( e.X, e.Y );

    // Set as selected
    yourDataGridView.Rows[info.RowIndex].Selected = true;
5 голосов
/ 16 октября 2008

классная вещь - добавить меню по этому правому клику, например, с опцией типа «Просмотр информации о клиенте», «проверить последние счета», «Добавить запись в журнал для этого клиента» и т. Д.

вам просто нужно добавить объект ContextMenuStrip, добавить пункты меню и в свойствах DataGridView просто выбрать его ContextMenuStrip.

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

помните, что вам нужен код JvR, чтобы узнать, в какой строке был пользователь, например, взять ячейку, которая содержит идентификатор клиента, например, и передать эту информацию.

надеюсь, это поможет улучшить ваше приложение

http://img135.imageshack.us/img135/5246/picture1ku5.png

http://img72.imageshack.us/img72/6038/picture2lb8.png

3 голосов
/ 06 февраля 2009

Подкласс DataGridView и создание события MouseDown для сетки,


private void SubClassedGridView_MouseDown(object sender, MouseEventArgs e)
{
    // Sets is so the right-mousedown will select a cell
    DataGridView.HitTestInfo hti = this.HitTest(e.X, e.Y);
    // Clear all the previously selected rows
    this.ClearSelection();

    // Set as selected
    this.Rows[hti.RowIndex].Selected = true;
}
0 голосов
/ 18 июня 2009

Вы должны сделать две вещи:

  1. Очистить все строки и выбрать текущий. Я перебираю все строки и использую выражение Bool i = e.RowIndex для этого

  2. Если вы сделали Шаг 1, у вас все еще есть большая ловушка:
    DataGridView1.CurrentRow не возвращает ранее выбранную вами строку (что довольно опасно). Поскольку CurrentRow только для чтения, вы должны сделать

    Me.CurrentCell = Me.Item(e.ColumnIndex, e.RowIndex)

    Protected Overrides Sub OnCellMouseDown(
        ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs)
    
        MyBase.OnCellMouseDown(e)
    
        Select Case e.Button
            Case Windows.Forms.MouseButtons.Right
                If Me.Rows(e.RowIndex).Selected = False Then
                    For i As Integer = 0 To Me.RowCount - 1
                        SetSelectedRowCore(i, i = e.RowIndex)
                    Next
                End If
    
                Me.CurrentCell = Me.Item(e.ColumnIndex, e.RowIndex)
        End Select
    
    End Sub
    
0 голосов
/ 19 января 2009

Вы можете использовать код JvR в событии MouseDown вашего DataGridView.

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