DataGridView
сгенерирует DataGridViewCheckBoxColumn
для bool
свойств. Но для bool?
свойств он сгенерирует DataGridViewTextBoxColumn
.
. Вы можете исправить это во время разработки или во время выполнения, заменив сгенерированный столбец на DataGridViewCheckBoxColumn
и установив его ThreeState
свойство в true.
Пример - Показать CheckBox для Nullable<bool>
в DataGridView
Следующая функция заменяет сгенерированные столбцы для bool?
свойств древовидным состояниемстолбцы флажка:
public void UseCheckBoxForNullableBool(DataGridView g)
{
g.Columns.Cast<DataGridViewColumn>()
.Where(x => x.ValueType == typeof(bool?))
.ToList().ForEach(x =>
{
var index = x.Index;
g.Columns.RemoveAt(index);
var c = new DataGridViewCheckBoxColumn();
c.ValueType = x.ValueType;
c.ThreeState = true;
c.DataPropertyName = x.DataPropertyName;
c.HeaderText = x.HeaderText;
c.Name = x.Name;
g.Columns.Insert(index, c);
});
}
В приведенной выше форме я использовал следующую модель:
public class Test
{
public int MyProperty1 { get; set; }
public bool? MyProperty2 { get; set; }
}
И применил UseCheckBoxForNullableBool
, чтобы изменить сгенерированный столбец для свойства bool?
на столбец флажка состояния дерева:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.dataGridView1.DataSource = new BindingList<Test>() {
new Test(){ MyProperty1 = 1, MyProperty2= null},
new Test(){ MyProperty1 = 2, MyProperty2= true},
new Test(){ MyProperty1 = 3, MyProperty2= false},
};
UseCheckBoxForNullableBool(dataGridView1);
}
Примечание. Если вам интересно показать ComboBox
для bool
или bool?
столбцы, посмотрите на этот пост , который делает то же самое для bool
свойств, и измените его немного, чтобы также поддерживать bool?
.