Не удается установить флажок в DataGridViewCheckBoxColumn?

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

DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.ThreeState = false;
checkColumn.Width = 20;

MyDataGridView.Columns.Add(checkColumn);
MyDataGridView.Columns.Add(new DataGridViewTextBoxColumn());

Поскольку в этом случае ничего не появляется, я решил добавить некоторые фиктивные данные.

for (int i = 0; i < 10; i++)
{
    MyDataGridView.Rows.Add(new Object[] { true, "test"});
}

Как правило, DataGridView заполняется данными, связанными со списком пользовательских объектов, как в этом вопросе, но я подумал, что было бы лучше, если бы это работало в основном, прежде чем двигаться дальше.

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

Ответ 1

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

Ответ 2

У меня была та же проблема, решение для меня состояло в том, чтобы изменить

"EditMode" из "EditProgramatically" в значение по умолчанию "EditOnKeystrokeOrF2",

это решило мою проблему.

Все вышеупомянутые предложения уже были реализованы.

С уважением Хайдер

Ответ 3

Просто измените свойство readonly DataGridView

     MyDataGridView.ReadOnly = false; 

Ответ 4

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

Ответ 5

Это также может произойти, когда вы заполняете DataGridView объектом, у которого есть public Boolean property (CheckBox в DataGridView), которое имеет private set. Столбец DataGridView который представляет это свойство (только для чтения), автоматически доступен только для чтения, так как ему не разрешено устанавливать свойство извне (= вне кода объекта).

public class ExampleObject
{
    /// <summary>
    /// A public property that can only be read.
    /// When a DataGridViewRow is populated with this object, the column representing this Boolean property is automatically read-only.
    /// </summary>
    public Boolean QCPassed
    {
        get;
        private set;
    }
}

Ответ 6

У меня была та же проблема с разными ситуациями. Мой DataGridView был привязан к DataTable, который был заполнен SqlDataReader (который доступен только для чтения). Я заменил SqlDataReader с SqlDataAdapter, отлично работает.

DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con);
da.Fill(dt);