Ошибка при установке флажка в dataGrid - PullRequest
0 голосов
/ 16 ноября 2018

Я использую 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!). Решение не работает

1 Ответ

0 голосов
/ 16 ноября 2018

Итак, вот что вам нужно сделать:

  • Поместить все временные данные (проверенный идентификатор флажка) в формат XML, сохранить только идентификатор.
  • Создать метод, которыйпозволяет фильтровать XML.
  • , отметив и сняв флажок, будет легко.
...