如果您在winforms AllowUserToAddRows
中指定DataGridView
,则用户可以在网格中手动添加新行。现在我想在一列中添加一个图像按钮,它也应该在新行中显示。但是我不能让它显示图像,只显示红十字图像就像没有找到它一样。
以下是带有令人讨厌的图像的网格截图:
我要展示的图片位于Properties.Resources.Assign_OneToMany
。
我到处搜索并尝试了几种方式(在构造函数中):
var assignChargeColumn = (DataGridViewImageColumn)this.GrdChargeArrivalPart.Columns["AssignCharge"];
assignChargeColumn.DefaultCellStyle.NullValue = null;
assignChargeColumn.DefaultCellStyle.NullValue = Properties.Resources.Assign_OneToMany;
或
private void GrdChargeArrivalPart_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
var grid = (DataGridView)sender;
DataGridViewRow row = grid.Rows[e.RowIndex];
if (row.IsNewRow)
{
var imageCell = (DataGridViewImageCell) row.Cells["AssignCharge"];
imageCell.Value = new Bitmap(1, 1); // or ...:
imageCell.Value = Properties.Resources.Assign_OneToMany; // or ...:
imageCell.Value = null;
}
}
当然我也在设计师DataGridView
的列集中分配了这个图像:
那么为DataGridViewImageColumn
指定默认图像的正确方法是什么,即使没有数据也只显示新行?如果这很重要,那就是jpg-image:
答案 0 :(得分:8)
您可以参加CellFormatting
活动:
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// ToDo: insert your own column index magic number
if (this.dgv.Rows[e.RowIndex].IsNewRow && e.ColumnIndex == 2)
{
e.Value = Properties.Resources.Assign_OneToMany;
}
}
我认为它忽略了列编辑器中的Image属性赋值,因为行的开头是Nothing / Null。
答案 1 :(得分:2)
手动绘制图像,因为系统绘制了默认图像:
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 3 && e.RowIndex >= 0) //change 3 with your collumn index
{
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
if (dataGridView1 .Rows [e.RowIndex].IsNewRow )
{
Bitmap bmp = Properties.Resources.myImage;
e.Graphics.DrawImage(bmp, e.CellBounds.Left + e.CellBounds.Width / 2 -
bmp.Width / 2, e.CellBounds.Top + e.CellBounds.Height / 2 -
bmp.Height / 2, bmp.Width, bmp.Height);
}
e.Handled = true;
}
}