захватить щелчок столбца ячейки и выполнить событие - PullRequest
0 голосов
/ 29 января 2012

Привет, у меня есть представление данных, первый столбец которого (индекс = 0) является столбцом флажка.Я хочу обновить метку, когда ячейка отмечена и не отмечена.Кажется, моя функция работает нормально, но она не обновляет метку до тех пор, пока не будет изменена следующая ячейка в этом столбце.

когда форма загружает все строки, проверяются, скажем, 4 из 4. Я снимаю галочку с одной строкии ярлык не обновляется.Я снимаю флажок с другой строки, а затем появляется 3, так что вы видите, что он работает на шаг позади.

Я пробовал несколько разных DataGridViewCellEvents, таких как CellValueChanged, CellStateChanged, CellEndEdit, но все они ведут себя как говорят.мне все еще нужно иметь DataGridViewCellEventArgs e, чтобы я мог проверить столбец.

есть предложения?

private void fileGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                int numberOfFiles = 0;
                for (int i = 0; i < fileGrid.Rows.Count; i++)
                {
                    Console.WriteLine(fileGrid[0, i].Value.ToString());
                    if (fileGrid[0, i].Value.ToString() == "True")
                    {
                        numberOfFiles++;
                    }
                }
                numberOfFilesLabel.Text = numberOfFiles.ToString();
            }
        }

я пока не могу ответить на свой вопрос, но это то, что я использовалвыполнить:

private void fileGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                int numberOfFiles = 0;
                for (int i = 0; i < fileGrid.Rows.Count; i++)
                {
                    Console.WriteLine(fileGrid[0, i].Value.ToString());
                    if (fileGrid[0, i].Value.ToString() == "True")
                    {
                        numberOfFiles++;
                    }
                }

                if (fileGrid.IsCurrentCellDirty)
                    fileGrid.CommitEdit(DataGridViewDataErrorContexts.Commit);

                if (fileGrid.CurrentCell.Value.ToString().Equals("True"))
                {

                    numberOfFiles++;
                }
                if (fileGrid.CurrentCell.Value.ToString().Equals("False"))
                {

                    numberOfFiles--;
                }
                numberOfFilesLabel.Text = numberOfFiles.ToString();
            }
        }

1 Ответ

3 голосов
/ 29 января 2012

это происходит потому, что отредактированное значение не фиксируется непосредственно после изменения флажка.Это совершается, когда вы покидаете редактор.Вы должны немедленно зафиксировать значение, чтобы получить желаемое поведение.Один способ, который я нашел, но не пробовал, это:

private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
        if (e.ColumnIndex == 0)
        {
            if (dataGridView2.IsCurrentCellDirty)
                dataGridView2.CommitEdit(DataGridViewDataErrorContexts.Commit);

            if (dataGridView2.CurrentCell.Value.ToString().Equals("True"))
            {
                MessageBox.Show("Now do the job while checked value changed to True.");
                //
                // Do the job here.
                //
            }
        }
}

РЕДАКТИРОВАТЬ:

демонстрационное решение.

...