2

私は DataGridView を使用しており、いくつかの DataGridViewCheckBoxColumns セットアップがあり、そのうち 2 つは ThreeState プロパティが True に設定されています。

グリッドの一部の行では、チェックボックスをチェック済みまたは不確定にするだけです。チェックを外すと、ユーザーは使用できなくなります。ただし、ユーザーがチェックボックスを繰り返しクリックすると、チェックされた状態から不確定になり、チェックされていない状態になります。チェック、不確定、チェック、不確定などにしたいだけです。

チェックボックスがクリックされたときにチェック/チェック解除されないようにする方法はありますか (標準の Windows フォーム Checkbox コントロールの AutoCheck プロパティと同様)、または DataGridViewCheckBoxCell のチェックされた変更をキャンセルするために使用できるイベントはありますか?

チェックされたセルをチェックされていないセルからチェックされているセルまたは不確定なセルにプログラムで強制しようとしましたが、UI にはこれが反映されません。

4

1 に答える 1

2

追加したものが次のパターンに従っていると仮定しDataGridViewCheckBoxColumnます。

DataGridViewCheckBoxColumn cbc = new DataGridViewCheckBoxColumn();
cbc.ThreeState = true;
this.dataGridView1.Columns.Add(cbc);

DataGridView次に、CheckBox をクリックおよびダブルクリックするために、次のイベント ハンドラーを に追加するだけです。

this.dataGridView1.CellContentClick += ThreeState_CheckBoxClick;
this.dataGridView1.CellContentDoubleClick += ThreeState_CheckBoxClick;

private void ThreeState_CheckBoxClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCheckBoxColumn col = this.dataGridView1.Columns[e.ColumnIndex] as DataGridViewCheckBoxColumn;

    if (col != null && col.ThreeState)
    {
        CheckState state = (CheckState)this.dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue;

        if (state == CheckState.Unchecked)
        {
            this.dataGridView1[e.ColumnIndex, e.RowIndex].Value = CheckState.Checked;
            this.dataGridView1.RefreshEdit();
            this.dataGridView1.NotifyCurrentCellDirty(true);
        } 
    }
}

基本的に、デフォルトのトグル順序は次のとおりChecked => Indeterminate => Unchecked => Checkedです。したがって、クリック イベントがUncheck値をトリガーするときは、それを に設定しChecked、グリッドを強制的に新しい値で更新します。

于 2015-09-25T19:09:32.110 に答える