Дважды щелкните строку DataGridView? - PullRequest
9 голосов
/ 13 октября 2010

Я использую vb.net и DataGridView на winform.

Когда пользователь дважды щелкает строку, я хочу что-то сделать с этой строкой. Но как я могу узнать, нажал ли пользователь на строку или просто где-нибудь в сетке? Если я использую DataGridView.CurrentRow, то, если строка выбрана и пользователь щелкнет в любом месте сетки, текущая строка покажет выбранное, а не то, где пользователь щелкнул (что в этом случае будет не в строке, и я хотел бы игнорировать ее ).

Ответы [ 6 ]

25 голосов
/ 13 октября 2010

Попробуйте событие CellMouseDoubleClick ...

Private Sub DataGridView1_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
        Dim selectedRow = DataGridView1.Rows(e.RowIndex)
    End If
End Sub

Это сработает, только если пользователь фактически находится над ячейкой в ​​сетке. Проверка If отфильтровывает двойной щелчок на селекторах и заголовках строк.

3 голосов
/ 07 мая 2013

Используйте Datagridview DoubleClick Evenet, а затем Datagrdiview1.selectedrows [0] .cell ["CellName"], чтобы получить значение и обработать.

Ниже приведен пример, показывающий запись клиентов при двойном щелчке на выбранной строке.1004 * private void dgvClientsUsage_DoubleClick (отправитель объекта, EventArgs e) {

        if (dgvClientsUsage.SelectedRows.Count < 1)
        {
            MessageBox.Show("Please select a client");
            return;
        }

        else
        {
            string clientName = dgvClientsUsage.SelectedRows[0].Cells["ClientName"].Value.ToString();

            // show selected client Details
            ClientDetails clients = new ClientDetails(clientName);
            clients.ShowDialog();

        }
    }
2 голосов
/ 13 октября 2010

Используйте DataGridView.HitTest в обработчике двойного щелчка, чтобы узнать, где произошел щелчок.

0 голосов
/ 16 марта 2012

Вы можете попробовать это:

Private Sub grdview_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdview.CellDoubleClick

    For index As Integer = 0 To grdview.Rows.Count - 1

        If e.RowIndex = index AndAlso e.ColumnIndex = 1 AndAlso grdview.Rows(index).Cells(1).Value = "" Then

            MsgBox("Double Click Message")

        End If
    Next
End Sub
0 голосов
/ 13 октября 2010

Вы можете попробовать что-то вроде этого.

Private Sub DataGridView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick
    For index As Integer = 0 To DataGridView1.Rows.Count
        If DataGridView1.Rows(index).Selected = True Then
            'it is selected
        Else
            'is is not selected
        End If
    Next
End Sub

Имейте в виду, что я не смог проверить это, потому что у меня не было данных для заполнения моего DataGridView.

0 голосов
/ 13 октября 2010

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

...