删除数据网格视图图像列的最后一行中的红色 x
本文关键字:一行 红色 最后 数据网 数据 网格 视图 图像 删除 | 更新日期: 2023-09-27 18:37:18
>我尝试使用以下两个代码示例,并且都删除了红色x,但在显示时会导致无限循环。一旦由于某种原因,单元格在 RowPrePaint 中设置为 AddNewIndex .bmp,它将再次调用 RowPrePaint。然后 e 再次为 0,并且它继续循环。有谁知道在不导致 RowPrePaint 再次执行的情况下将值设置为 AddNewIndex .bmp的方法?(或者删除红色 x 的另一种方法?我也只是为了让我知道下次,是什么导致 RowPrePaint 被调用不止一次?
private void tableDocTypes_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (e.RowIndex >= tableDocTypes.NewRowIndex)
tableDocTypes.Rows[e.RowIndex].Cells[columnDocTypeImage.Index].Value = Properties.Resources.AddNewIndex;
}
private void tableDocTypes_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (tableDocTypes.Rows[e.RowIndex].IsNewRow)
tableDocTypes.Rows[e.RowIndex].Cells[columnDocTypeImage.Index].Value = Properties.Resources.AddNewIndex;
}
还在构造函数中添加以下内容:
InitializeComponent();
tableDocTypes.Columns[columnDocTypeImage.Index].DefaultCellStyle.NullValue = Properties.Resources.AddNewIndex;
RowPrePaint 在需要重新绘制行时触发。如果您修改了一行中的某些内容,则需要重新绘制该行,递归无穷大。
我不完全清楚您要完成什么,但我的猜测是您想更改特定单元格显示的内容。执行此操作的最佳方法之一是处理 CellFormatting 事件。在这种情况下,您将更改传入的DataGridViewCellFormattingEventArgs.Value
,而不是基础数据。
如果要使用数据集填充 DataGridView,请在创建表时添加以下代码:
DataTable dt = new DataTable();
dt.Columns.Add("ImageColumn");
dt.Columns["ImageColumn"].DataType = typeof(Byte[]);
即使您是从数据库填充的,也可以在将数据添加到表之前进行此设置。
Private Sub DGV_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DGV.CellPainting
'get rid of that annoying red x
If e.ColumnIndex = sender.Columns("ImageColumn").Index Then
If e.RowIndex = sender.RowCount - 1 Then
sender(e.ColumnIndex, e.RowIndex).Value = Nothing
End If
End If
End Sub
尝试上面的CellPainting代码来摆脱这个非常烦人且耗时的错误。