Программно изменить выбор в DatagridView (.NET) - PullRequest
15 голосов
/ 22 февраля 2009

Я изучаю VB.NET.

У меня проблема с компонентом DataGridView при попытке установить значение CurrentCell. То, что я пытаюсь сделать, это:

У меня есть DataGridView со значениями. Я хочу сделать кнопку в моих формах, и, нажимая на нее, я хочу изменить выбор с текущей строки на следующую. Чтобы объяснить больше, нажав кнопку, я хочу смоделировать эффект щелчка мыши на DataGridview.

Я надеюсь, что вы можете мне помочь,

Спасибо!

Ответы [ 9 ]

21 голосов
/ 22 февраля 2009

Может быть, что-то вроде этого:

    If DataGridView1.RowCount > 0 Then

        Dim MyDesiredIndex As Integer = 0

        If DataGridView1.CurrentRow.Index < DataGridView1.RowCount - 1 Then
            MyDesiredIndex = DataGridView1.CurrentRow.Index + 1
        End If

        DataGridView1.ClearSelection()            
        DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0)
        DataGridView1.Rows(MyDesiredIndex).Selected = True

    End If

Примечание 1: возможно, эти две строки не нужны. Я не доказал это

        DataGridView1.ClearSelection()            
        DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0)

Примечание 2: обратите внимание, что если мы находимся в последнем ряду, оно переходит к первому

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

Вам необходимо установить для свойства Selected конкретной строки значение true. Я думаю, что VB будет что-то вроде этого:

someDGV.Rows(index).Selected = True
2 голосов
/ 17 ноября 2011

Просто используйте методы BindingSource.MoveNext() и BindingSource.MovePrevious().

2 голосов
/ 06 декабря 2010

Если ваша сетка данных привязана к BindingSource, лучше изменить положение там:

Object key = Convert.ToInt32(cdr["WordList"]);
int itemFound = lexiconNamesBindingSource.Find("ID_Name", key);
lexiconNamesBindingSource.Position = itemFound;

... и вам может потребоваться завершить его с помощью:

lexiconNamesBindingSource.ResetBidings();

(Это старая ветка, но я нашел ее, так что кто-то еще может найти это полезным)

0 голосов
/ 03 июня 2018
Private Sub DGW2_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DGW2.DataBindingComplete
    Dim mygrid As DataGridView
    mygrid = CType(sender, DataGridView)
    mygrid.ClearSelection()
End Sub
0 голосов
/ 11 декабря 2015

Помимо правильного ответа Хавьера, если вы используете BindingSource для своего представления данных, тогда будет лучше изменить выбранный элемент из источника привязки, чем использовать datagridview.CurrentCell:

' Example Definitions
Dim bsExample As New BindingSource
Dim dgv As New DataGridView
dgv.DataSource = bsExample

' Example code to change current row position
Dim desiredIndex As Integer = 10
bsExample.Position = desiredIndex
0 голосов
/ 18 апреля 2015

подробности ответа выше, что идеально, учитывая, что я потратил на это не менее 4 часов. и предполагая, что ваше представление данных называется dgvDevices ... этот код будет обрабатывать событие, в котором вы выходите из игры, когда вы перемещаетесь назад и вперед по своим строкам

Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As   System.EventArgs) Handles btnPrev.Click
    Try
        dgvDevices.ClearSelection()
        Dim currentr As Integer = dgvDevices.CurrentCell.RowIndex
        dgvDevices.CurrentCell = dgvDevices.Rows(currentr - 1).Cells(0)
        dgvDevices.Rows(currentr - 1).Selected = True
    Catch ex As Exception
        dgvDevices.CurrentCell = dgvDevices.Rows(0).Cells(0)
        dgvDevices.Rows(0).Selected = True
    End Try

End Sub

Private Sub btnForw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnForw.Click
    Try
        dgvDevices.ClearSelection()
        Dim currentr As Integer = dgvDevices.CurrentCell.RowIndex
        dgvDevices.CurrentCell = dgvDevices.Rows(currentr + 1).Cells(0)
        dgvDevices.Rows(currentr + 1).Selected = True
    Catch ex As Exception
        dgvDevices.CurrentCell = dgvDevices.Rows(dgvDevices.RowCount - 1).Cells(0)
        dgvDevices.Rows(dgvDevices.RowCount - 1).Selected = True
    End Try
End Sub
0 голосов
/ 10 сентября 2013

Чтобы получить выбранную строку, вы должны использовать SelectedRows (0). Индекс независимо от CurrentRow. Потому что если вы программно создадите строку, как вы выбрали, то в следующий раз вы найдете 0 в CurrentRow.Index . Так было бы как:

If DataGridView1.SelectedRows(0).Index < DataGridView1.RowCount - 1 Then
    MyDesiredIndex = DataGridView1.SelectedRows(0).Index + 1
End If

DataGridView1.Rows(MyDesiredIndex).Selected = True
0 голосов
/ 22 февраля 2009

Вы можете сделать это так:

If DataGridView1.CurrentRow.Index < DataGridView1.Rows.Count Then
    DataGridView1.Rows(DataGridView1.CurrentRow.Index + 1).Selected = True
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...