web-dev-qa-db-ja.com

プログラムでDatagridView(.NET)の選択を変更する

VB.NETを学習しています。

CurrentCellの値を設定しようとすると、DataGridViewコンポーネントに問題があります。私がやろうとしていることは:

値を持つDataGridViewがあります。フォームにボタンを作成し、それをクリックすると現在の行から次の行に選択を変更したい。さらに説明するには、ボタンをクリックして、DataGridviewでのマウスクリックの効果をシミュレートします。

あなたが私を助けてくれることを願っています、

ありがとう!

15
Dali

多分このようなもの:

    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:おそらくこれらの2行は不要です。私はそれを証明していません

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

注2:最後の行にいる場合、最初に行くことに注意してください

23
Javier

特定の行のSelectedプロパティをtrueに設定する必要があります。 VBは次のようになります:

someDGV.Rows(index).Selected = True
4
Beep beep

データグリッドがBindingSourceにバインドされている場合は、そこで位置を変更することをお勧めします。

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

...そして、次のように仕上げる必要があるかもしれません:

lexiconNamesBindingSource.ResetBidings();

(これは古いスレッドですが、私はそれを見つけたので、他の誰かがこれが役立つと思うかもしれません)

2
Alex Russell

BindingSource.MoveNext()およびBindingSource.MovePrevious()メソッドを使用するだけです。

2
Gan

選択された行を取得するには、CurrentRowにもかかわらずSelectedRows(0).Indexを使用する必要があります。プログラムで選択した行を作成すると、次にCurrentRow.Indexに0が見つかります。だからそれは次のようになります:

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

DataGridView1.Rows(MyDesiredIndex).Selected = True
0
sikarnarender

あなたはそれをこのようにすることができます:

If DataGridView1.CurrentRow.Index < DataGridView1.Rows.Count Then
    DataGridView1.Rows(DataGridView1.CurrentRow.Index + 1).Selected = True
End If
0
splattne
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        If DataGridView1.Rows.Count - 1 > 0 Then
            For i As Integer = 0 To DataGridView1.Rows.Count - 1 Step +1
                If DataGridView1.Rows.Count - 1 > 0 Then
                    DataGridView1.Rows.RemoveAt(0)
                End If
            Next
        Else

        End If
    End Sub
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
DrSerhat

私がこれを探すのに少なくとも4時間費やしたことを考えると完璧な上記の答えを拡張します。そして、datagridviewが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

Javiers正解の他に、datagridviewに 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