9

ユーザーが編集中のセルと同じ行にある行ヘッダーをクリックすると、強制的にDataGridViewCell編集モードを終了しようとしています。記録として、editmode は EditOnEnter に設定されています。

したがって、それに応じて次のイベントを記述します。

private void dGV_common_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    dGV_common.EndEdit();   
} 

上記のコードは、セルの編集モードを強制的に終了しませんでした。以下のコードは、セルを編集モードから強制的に終了させます。

    private void dGV_common_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        dGV_common.EndEdit();   
        dGV_common.CurrentCell = null;
    }

また、行全体の選択が解除されます。これは、ユーザーが をクリックしたときの望ましい動作ではありませんRowHeader

したがって、私の回避策は次のとおりです。

private void dGV_customer_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    dGV_customer.EndEdit();
    dGV_customer.CurrentCell = null;
    dGV_customer.Rows[e.RowIndex].Selected = true;
}

単一の行ヘッダーを選択するとうまくいきますが、Shift キーを押しながら複数の行ヘッダーを選択しようとすると失敗します。

どうすればこの状況を適切に処理できますか?

4

2 に答える 2

6

今週、まったく同じ問題に遭遇しました!これは、datagridview で十分に文書化されたバグのようです。それ以降のバージョンで修正されているかどうかはわかりません。グリッドがクリックされたときに行ヘッダーをチェックし、編集モードを変更しても機能するようです:

private void dataGridView_MouseClick( object sender, MouseEventArgs e ) {
  DataGridView dgv = (DataGridView)sender;
  if (dgv.HitTest(e.X, e.Y).Type == DataGridViewHitTestType.RowHeader) {
    dgv.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
    dgv.EndEdit();
  } else {
    dgv.EditMode = DataGridViewEditMode.EditOnEnter;
  }
}

ただし、アプリケーション全体で多くの datagridview を使用している場合、これはまだイライラする回避策です。より良い解決策を見つけたらお知らせください。

編集:この質問には同様の解決策があるようです

于 2013-01-24T10:18:56.207 に答える