DataGridViewCheckBoxCell, как показать проверено, когда установлено во время загрузки формы - PullRequest
4 голосов
/ 30 июня 2011

У меня есть DataGridView, который загружает данные из DataTable вместе с несвязанным столбцом DataGridViewCheckBoxCells.Строки в DataGridView сравниваются с отдельной таблицей DataTable со значениями, сохраненными пользователем, и, если есть совпадение, флажок для этой строки должен быть установлен.

Вот код, который сравнивает значения и устанавливаетзначение флажка 'true':

foreach (int j in selectedObjectives)
{
    foreach (DataGridViewRow r in dgvObjectives.Rows)
    {
        if (j == Convert.ToInt32(r.Cells["ObjectiveID"].Value))
        {
            dgvObjectives.CurrentCell = r.Cells["Select"];      
            ((DataGridViewCheckBoxCell)r.Cells["Select"]).Value = true;
            //dgvObjectives.InvalidateCell(r.Cells["Select"]);
            //dgvObjectives.EndEdit();
            //dgvObjectives.CommitEdit(DataGridViewDataErrorContexts.Commit);

        }
        if (Convert.ToInt32(r.Cells["ObjectiveID"].Value) == selectedIndex)
        {
            r.Selected = true;
        }
    }
}

Когда я вызываю метод для выполнения этого действия во время загрузки формы private void WQMDrill_Load(object sender, EventArgs e), значения устанавливаются правильно, но флажки не проверяются.Однако при вызове после завершения загрузки формы код работает отлично.К сожалению для меня, мне абсолютно необходимо проверить их во время процесса загрузки.

Я надеюсь, что со своей проблемой я разобрался, любая помощь по этому вопросу будет принята с благодарностью.Как вы можете видеть, я пытался сделать недействительной только ячейку, а также весь элемент управления DataGridView.У меня также есть

private void dgvObjectives_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (this.dgvObjectives.CurrentCell.ColumnIndex == 0)
    {
        this.dgvObjectives.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

, который не срабатывает в это время.Спасибо.

Ответы [ 3 ]

1 голос
/ 30 июня 2011

Вы можете установить флажок выбора и обновления в обработчике событий DataBindingComplete, который срабатывает после FormLoad, но до того, как что-либо отображается пользователю.

0 голосов
/ 15 февраля 2012

У меня была такая же проблема, и я пытался решить ее разными способами, большинство из них не удалось, кроме случаев, когда я пытался this.BeginInvoke(new CDelegate()).

0 голосов
/ 30 июня 2011

Я не уверен, что вызов CommitEdit на самом деле вызовет Paint в ячейке.Попробуйте обработать событие CellMouseUp и запустить EndEdit, если столбец является столбцом флажка.

private void dgvObjectives_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dgvObjectives.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn)
    {
        dgvObjectives.EndEdit();
    }
}
...