我有followowing DataGridViewCheckBoxCell
這是我DataGridView
部分:可以DataGridViewCheckBoxCell以編程方式接受CheckState.Indeterminate,但不是通過單擊?
DataGridViewCheckBoxCell cell = new DataGridViewCheckBoxCell(true) {Value = CheckState.Unchecked};
grdRow.Cells.Add(cell);
grdRow.Tag = key;
grdFilter.Rows.Add(grdRow);
後來,我根據其他複選框是否檢查更新其狀態。
var numChecked = cells.Count(c => c.Value.Equals(true));
cbCell.Value = (numChecked == cells.Count) ? CheckState.Checked : (numChecked == 0 ? CheckState.Unchecked : CheckState.Indeterminate);
This works great。但是,如果用戶單擊複選框,它會在「已選中」,「未選中」和「不確定」之間循環。我只想在之間循環檢查和未檢查。
如果我在單元上設置了TriState
到False
,它不再允許我將Value
設置爲CheckState.Indeterminate
。
有沒有辦法讓我想要的行爲?
更新:
我試圖誘捕CellValueChanged
事件,像這樣:
void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
var changedCell = grdFilter.Rows[e.RowIndex].Cells[e.ColumnIndex];
if(changedCell.Value.Equals(CheckState.Indeterminate))
changedCell.Value = CheckState.Unchecked;
}
然而,這沒有任何影響。我仍然可以點擊所有三個州。我已經驗證過該事件在調試器下觸發,並且Value
屬性確實設置爲CheckState.Unchecked
。
註冊已更改值的事件,並在新值爲「CheckState.Indeterminate」時將其設置爲「CheckState.Unchecked」。 –
@JeffreyWieder - 是的,出於某種原因在CellValueChanged事件處理程序中設置單元格Value值似乎不起作用。必須有一些我錯過了。 –