DataGridViewButtonColumn 充当 DataGridViewCheckBoxColumn
DataGridViewButtonColumn acting as DataGridViewCheckBoxColumn
我想让DataGridViewButtonColumn
充当DataGridViewCheckBoxColumn
。意思是在按钮内有一些图像作为 true
和另一个图像作为 false
并通过 DataMember
绑定到 属性。
我认为 class 继承自 DataGridViewCheckBoxColumn
和 override
paint
方法 "should" 有效。
只需使用 DataGridViewCheckBoxColumn
但要处理 DataGridView
的 CellPaint
事件,并为选中状态绘制一个图像,为未选中状态绘制另一个图像。
例子
创建一个名为 Form1
的 Form
,然后在窗体上放置一个 DataGridView
控件,并用以下代码替换 Form1.cs
的内容。还要确保将 Checked
and UnChecked
图片添加到 Resources
.
然后你会看到这样的结果:
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
this.dataGridView1.CellPainting += dataGridView1_CellPainting;
}
private void Form1_Load(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.Add("Column1", typeof(bool));
dt.Rows.Add(false);
dt.Rows.Add(true);
this.dataGridView1.DataSource = dt;
}
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex >= 0)
{
var value = (bool?)e.FormattedValue;
e.Paint(e.CellBounds, DataGridViewPaintParts.All &
~DataGridViewPaintParts.ContentForeground);
var img = value.HasValue && value.Value ?
Properties.Resources.Checked : Properties.Resources.UnChecked;
var size = img.Size;
var location = new Point((e.CellBounds.Width - size.Width) / 2,
(e.CellBounds.Height - size.Height) / 2);
location.Offset(e.CellBounds.Location);
e.Graphics.DrawImage(img, location);
e.Handled = true;
}
}
我想让DataGridViewButtonColumn
充当DataGridViewCheckBoxColumn
。意思是在按钮内有一些图像作为 true
和另一个图像作为 false
并通过 DataMember
绑定到 属性。
我认为 class 继承自 DataGridViewCheckBoxColumn
和 override
paint
方法 "should" 有效。
只需使用 DataGridViewCheckBoxColumn
但要处理 DataGridView
的 CellPaint
事件,并为选中状态绘制一个图像,为未选中状态绘制另一个图像。
例子
创建一个名为 Form1
的 Form
,然后在窗体上放置一个 DataGridView
控件,并用以下代码替换 Form1.cs
的内容。还要确保将 Checked
UnChecked
Resources
.
然后你会看到这样的结果:
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
this.dataGridView1.CellPainting += dataGridView1_CellPainting;
}
private void Form1_Load(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.Add("Column1", typeof(bool));
dt.Rows.Add(false);
dt.Rows.Add(true);
this.dataGridView1.DataSource = dt;
}
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex >= 0)
{
var value = (bool?)e.FormattedValue;
e.Paint(e.CellBounds, DataGridViewPaintParts.All &
~DataGridViewPaintParts.ContentForeground);
var img = value.HasValue && value.Value ?
Properties.Resources.Checked : Properties.Resources.UnChecked;
var size = img.Size;
var location = new Point((e.CellBounds.Width - size.Width) / 2,
(e.CellBounds.Height - size.Height) / 2);
location.Offset(e.CellBounds.Location);
e.Graphics.DrawImage(img, location);
e.Handled = true;
}
}