Ответ 1
Код кажется прекрасным, поэтому я просто могу сказать вам проверить и убедиться, что следующие свойства DataGridView
установлены правильно: ReadOnly
установлено в False
и Enabled
True
.
Я создаю простой 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
заполняется данными, связанными со списком пользовательских объектов, как в этом вопросе, но я подумал, что было бы лучше, если бы это работало в основном, прежде чем двигаться дальше.
Я не пытаюсь установить проверенное состояние программным путем, но позвольте пользователю выбрать, а затем использовать этот выбор в других обработчиках событий.
Код кажется прекрасным, поэтому я просто могу сказать вам проверить и убедиться, что следующие свойства DataGridView
установлены правильно: ReadOnly
установлено в False
и Enabled
True
.
У меня была та же проблема, решение для меня состояло в том, чтобы изменить
"EditMode" из "EditProgramatically" в значение по умолчанию "EditOnKeystrokeOrF2",
это решило мою проблему.
Все вышеупомянутые предложения уже были реализованы.
С уважением Хайдер
Просто измените свойство readonly DataGridView
MyDataGridView.ReadOnly = false;
Сама таблица может быть настроена только на чтение, даже если столбец флажка не является настройкой таблицы, будет переопределять настройку столбца.
Это также может произойти, когда вы заполняете 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;
}
}
У меня была та же проблема с разными ситуациями. Мой DataGridView был привязан к DataTable, который был заполнен SqlDataReader (который доступен только для чтения). Я заменил SqlDataReader с SqlDataAdapter, отлично работает.
DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con);
da.Fill(dt);