Инициирование флажка оценивает измененное событие в DataGridView

У меня есть представление сетки, которое имеет столбец флажка, и я хочу инициировать событие рисунка, как только значение ячейки переключается. Я попробовал ValueChaged и CellEndEdit и BeginEdit, и выбрал режим выбора в качестве CellSelect. Что касается первые 2 события, событие было инициировано после окончания режима редактирования, как перемещение из текущей ячейки или движение назад и вперед. Это - просто странное поведение.

Есть ли что-нибудь, что инициировало событие на представлении сетки, как только значение ячейки изменяется?

30
задан mustafabar 15 November 2019 в 10:47
поделиться

5 ответов

Может быть не полезно для вас сейчас, но .Net 4 имеет класс SortedSet в BCL.

-121--3677837-

Просто используйте parseFloat () :

var c = parseFloat(a) + parseFloat(b);
-121--2875855-

Мой коллега рекомендует перехватить событие CurrentCellReadingStateChanged. См. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx .

23
ответ дан 27 November 2019 в 23:08
поделиться

Попробуйте подключиться к событию CellContentClick. DataGridViewCellEventArgs будет иметь ColumnIndex и RowIndex, чтобы вы могли узнать, действительно ли был нажат ChecboxCell. Преимущество этого события в том, что оно сработает только в том случае, если был установлен фактический флажок. Если вы нажмете на белую область ячейки вокруг флажка, он не сработает. Таким образом, вам практически гарантировано, что значение флажка было изменено при срабатывании этого события. Затем вы можете вызвать Invalidate (), чтобы инициировать событие рисования, а также вызов EndEdit (), чтобы инициировать конец редактирования строки, если вам это нужно.

4
ответ дан 27 November 2019 в 23:08
поделиться

В конце концов я реализовал это так

  private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {

        if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
        {
            if (dataGridView1[e.ColumnIndex, e.RowIndex].GetContentBounds(e.RowIndex).Contains(e.Location))
            {
                cellEndEditTimer.Start();
            }
        }

    }

    private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    { /*place your code here*/}


    private void cellEndEditTimer_Tick(object sender, EventArgs e)
    {
        dataGridView1.EndEdit();
        cellEndEditTimer.Stop();
    }
4
ответ дан 27 November 2019 в 23:08
поделиться

У меня была такая же проблема, но придумала другое решение:

Если вы делаете столбец или всю сетку «только для чтения», чтобы, когда пользователь нажимает флажок, он не делает изменение значения.

К счастью, событие DataGridView.cellClick все еще уволено. В моем случае я делаю следующее в событии TellClick :

if (jM_jobTasksDataGridView.Columns[e.ColumnIndex].CellType.Name == "DataGridViewCheckBoxCell")

, но вы можете проверить имя столбца, если у вас есть более одного столбца флажка.

Я тогда делаю всю модификацию / сохранение набора данных.

4
ответ дан 27 November 2019 в 23:08
поделиться

cellEndEditTimer.Start ();

эта строка заставляет datagridview обновлять список отмеченных флажков

Спасибо.

0
ответ дан 27 November 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: