Я использую dataGrid, который имеет флажок в одном из своих столбцов. Я хочу определить, когда этот флажок установлен и снят, и что-то сделать, поэтому я сделал это:
private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
Trace.WriteLine("Cell Content Click Col: " + e.ColumnIndex + " Row: " + e.RowIndex);
if(e.ColumnIndex==0) //it is a check
{
Trace.WriteLine("Value:"+ dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
}
dataGridView2.CommitEdit(DataGridViewDataErrorContexts.Commit); //This has to be put here in order for CellValueChanged to work
//see https://stackoverflow.com/a/11844206/4451521
}
private void dataGridView2_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
Trace.WriteLine("Cell value changed " + e.ColumnIndex + " Row: " + e.RowIndex);
Trace.WriteLine("Value:" + dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
if(e.ColumnIndex==0&& (bool)dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value==true)
{
dataGridView2.Rows[e.RowIndex].Cells["Quantity"].Value = 1.0;
}
else if (e.ColumnIndex == 0 && (bool)dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == false)
{
dataGridView2.Rows[e.RowIndex].Cells["Quantity"].Value = 0;
}
Trace.WriteLine("----------------------------");
Merge();//an algorithm to merge rows when necessary
}
Теперь это прекрасно работает, как в 99% случаев.
Каждый раз, когда я нажимаю флажок (столбец 0), я получаю
Cell Content Click Col: 0 Row: 4
Value:False
Cell value changed 0 Row: 4
Value:True
Cell value changed 4 Row: 4
Value:1
Таким образом, изменив его с False на True и установив столбец 4 в 1.
И каждый раз, когда я снимаю галочку, я получаю
Cell Content Click Col: 0 Row: 4
Value:True
Cell value changed 0 Row: 4
Value:False
Cell value changed 4 Row: 4
Value:0
На этот раз изменив его с True на False и установив в столбце 4 значение 0
Однако, если я начинаю играть с проверкой и снимать флажок несколько раз, иногда , даже когда я проверяю (или снимаю флажок - это происходит в обеих ситуациях), функция CellContentClick
не регистрируется.
Это означает, что несмотря на то, что я "щелкнул по содержимому" (установив или сняв его), функция не вызывается. В результате плохое поведение, что столбец проверяется, но значение в столбце 4 не 1 (или наоборот)
Это происходит спорадически, но мне интересно, почему это происходит и как это исправить.
EDIT:
Попробовал ответ , предложенный в «дублирующем» вопросе, и он на самом деле не работает. Кроме того, это ухудшает ситуацию. В исходной задаче иногда (в 1% случаев) щелчок не работает, но после повторного щелчка все работает как обычно.
В другом вопросе ответ (при попытке CellClick) не меняет другой столбец. и что хуже всего, если он не работает, он не работает для всех остальных.
Например я проверяю и значение не изменилось. Затем я снимаю флажок и теперь значение меняется на 1 (не 0!). и когда я проверяю это снова, t изменяется на 0 (не 1!). Решение не работает