web-dev-qa-db-ja.com

DataGridViewでプログラムで行を選択する

私のコードが次のようになっているイベントの後に、以前に選択した行の行を選択したい。

int currentRow = dgvIcbSubsInfo.CurrentCell.RowIndex;
//code to execute
dgvIcbSubsInfo.Rows[currentRow].Selected = true;

コードを実行すると、プレビューは次のようになります。しかし、ID = 1272741(青の選択)で>シンボルを取得する必要があります。

enter image description here

21
manoj

おそらく、読み取り専用のプロパティである 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];
47
Alex Filipovici

行を強調したいと思います。次のコードを試してください、私はそれが役立つかもしれないと思う:

Color color = dgv.Rows[prevRowIndex].DefaultCellStyle.SelectionBackColor;
dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColor = color;
0
mihirj

現在の行を変更するには、次を試してください。 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];
}
0
Goal Man