私のコードが次のようになっているイベントの後に、以前に選択した行の行を選択したい。
int currentRow = dgvIcbSubsInfo.CurrentCell.RowIndex;
//code to execute
dgvIcbSubsInfo.Rows[currentRow].Selected = true;
コードを実行すると、プレビューは次のようになります。しかし、ID = 1272741(青の選択)で>
シンボルを取得する必要があります。
おそらく、読み取り専用のプロパティである DataGridView.CurrentRow Property を見ていたかもしれません。
現在のセルを含む行を取得します。
ただし、備考セクションには次のように書かれています。
現在の行を変更するには、
CurrentCell
プロパティを目的の行のセルに設定する必要があります。
また、 DataGridView.CurrentCell Property から、次のことがわかります。
このプロパティの値を変更すると、CurrentCellChangedイベントの前にSelectionChangedイベントが発生します。この時点でCurrentCellプロパティにアクセスするSelectionChangedイベントハンドラーは、以前の値を取得します。
したがって、currentRow
値を設定すると選択されるため、実際にCurrentCell
を選択する必要はありません(SelectionChanged
イベントとCurrentCellChanged
イベントの間の現在のスコープ内で実行するコードがない限り)。これを試して:
//dgvIcbSubsInfo.Rows[currentRow].Selected = true;
dgvIcbSubsInfo.CurrentCell = dgvIcbSubsInfo.Rows[currentRow].Cells[0];
行を強調したいと思います。次のコードを試してください、私はそれが役立つかもしれないと思う:
Color color = dgv.Rows[prevRowIndex].DefaultCellStyle.SelectionBackColor;
dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColor = color;
現在の行を変更するには、次を試してください。 OPはどの行を新しい行にすべきかについて少し不明確なので、私の例は現在の行から前の行に移動することを示しています(前の行がある場合)。コードの最初の行はオプションです。 FullRowSelectを使用したくない場合は、colを0(または他の列)にハードコードして固定列を使用することもできます。
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
int row = dataGridView.CurrentCell.RowIndex;
int firstRow = dataGridView.Rows.GetFirstRow(DataGridViewElementStates.None);
if (row != firstRow)
{
row--;
int col = dataGridView.CurrentCell.ColumnIndex;
dataGridView.CurrentCell = dataGridView[col, row];
}