【问题标题】:How to bind a Boolean column to a toggle button in a DataGridView如何将布尔列绑定到 DataGridView 中的切换按钮
【发布时间】:2018-08-06 17:12:16
【问题描述】:
【问题讨论】:
标签:
c#
winforms
data-binding
datagridview
dataset
【解决方案1】:
您可以将该列绑定到DataGridViewButtonColumn。然后使用以下事件来满足要求:
示例
在表单上拖放DataGridView 并为您的表单粘贴以下代码并运行它:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var dt = new DataTable();
dt.Columns.Add("C1", typeof(bool)).DefaultValue = true;
dt.Columns.Add("C2", typeof(string));
dt.Rows.Add(true, "something");
dt.Rows.Add(false, "something else");
dataGridView1.Columns.Add(new DataGridViewButtonColumn()
{ DataPropertyName = "C1", Name = "C1", HeaderText = "C1" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
{ DataPropertyName = "C2", Name = "C2", HeaderText = "C2" });
dataGridView1.DataSource = dt;
dataGridView1.CellFormatting += dgv_CellFormatting;
dataGridView1.CellContentClick += dgv_CellContentClick;
}
private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0 || e.ColumnIndex != 0)
return;
var value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
if (value != null && value != DBNull.Value)
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !(bool)value;
}
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex < 0 || e.ColumnIndex != 0)
return;
var value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
if (value != null && value != DBNull.Value)
e.Value = (bool)value ? "-" : "+";
}
注意
要更改列类型,只需编辑列(使用Columns 属性或打开智能标签面板并选择“编辑列”)。然后在列编辑器对话框中,选择复选框列并在属性网格中,将其ColumnType 更改为DataGridViewButtonColumn。