VB.NETを学習しています。
CurrentCellの値を設定しようとすると、DataGridViewコンポーネントに問題があります。私がやろうとしていることは:
値を持つDataGridViewがあります。フォームにボタンを作成し、それをクリックすると現在の行から次の行に選択を変更したい。さらに説明するには、ボタンをクリックして、DataGridviewでのマウスクリックの効果をシミュレートします。
あなたが私を助けてくれることを願っています、
ありがとう!
多分このようなもの:
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:最後の行にいる場合、最初に行くことに注意してください
特定の行のSelectedプロパティをtrueに設定する必要があります。 VBは次のようになります:
someDGV.Rows(index).Selected = True
データグリッドがBindingSourceにバインドされている場合は、そこで位置を変更することをお勧めします。
Object key = Convert.ToInt32(cdr["WordList"]);
int itemFound = lexiconNamesBindingSource.Find("ID_Name", key);
lexiconNamesBindingSource.Position = itemFound;
...そして、次のように仕上げる必要があるかもしれません:
lexiconNamesBindingSource.ResetBidings();
(これは古いスレッドですが、私はそれを見つけたので、他の誰かがこれが役立つと思うかもしれません)
BindingSource.MoveNext()
およびBindingSource.MovePrevious()
メソッドを使用するだけです。
選択された行を取得するには、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
あなたはそれをこのようにすることができます:
If DataGridView1.CurrentRow.Index < DataGridView1.Rows.Count Then
DataGridView1.Rows(DataGridView1.CurrentRow.Index + 1).Selected = True
End If
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
私がこれを探すのに少なくとも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
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