2015-06-19 48 views
1

我有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。但是,如果用戶單擊複選框,它會在「已選中」,「未選中」和「不確定」之間循環。我只想在之間循環檢查未檢查

如果我在單元上設置了TriStateFalse,它不再允許我將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

+0

註冊已更改值的事件,並在新值爲「CheckState.Indeterminate」時將其設置爲「CheckState.Unchecked」。 –

+0

@JeffreyWieder - 是的,出於某種原因在CellValueChanged事件處理程序中設置單元格Value值似乎不起作用。必須有一些我錯過了。 –

回答

1

我認爲CellValueChanged事件觸發的時間太晚,無法讓用戶更改CheckBox列的值。嘗試連線了CurrentCellDirtyStateChanged事件,並提交更改:在您的CellValueChanged事件

void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e) { 
    dgv.CommitEdit(DataGridViewDataErrorContexts.Commit); 
} 

然後,你可以只改變ThreeState屬性:

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e) { 
    ((DataGridViewCheckBoxCell)dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]).ThreeState = false; 
} 

你或許應該篩選列,只能這樣做對您的CheckBox列等。

+0

這不起作用。當我將'ThreeState'設置爲'false'時,它將不再允許我以編程方式將複選框設置爲'Indeterminate'。也許我的問題並不清楚。我希望能夠在代碼中將複選框設置爲「Indeterminate」,但我*不希望用戶能夠執行此操作。 –

+0

也許我必須連接一些代碼,以便在鏈接複選框再次混合時將'ThreeState'設置回true。這似乎*令人難以置信的*哈克! –

+0

@MikeChristensen我解釋說,一旦用戶開始點擊,ThreeState就會消失。如果您有一些按鈕功能將其全部置回不確定狀態,那麼只需將其添加到代碼中即可將ThreeState設置爲True。我並不覺得這太難懂,只是一種方法來完成您的要求。 – LarsTech

相關問題