删除datagridview图像列的最后一行中的红色x

时间:2012-06-14 17:47:07

标签: c# winforms datagridview

我尝试使用以下两个代码示例,并且都删除了红色x,但在显示时会导致无限循环。一旦将单元格设置为RowPrePaint中的AddNewIndex .bmp,由于某种原因它再次调用RowPrePaint。然后e再次为0并且它保持循环。有没有人知道一种方法将值设置为AddNewIndex .bmp而不会导致RowPrePaint再次执行? (或者是一种不同的方法来删除红色的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;

3 个答案:

答案 0 :(得分:0)

当需要重新绘制行时,会触发RowPrePaint。如果您连续修改某些内容,则需要重新绘制该行,请递归广告无穷大。

我并不完全清楚你想要完成的是什么,但我的猜测是你要改变特定细胞显示的内容。最好的方法之一是处理CellFormatting事件。在那种情况下,您可以更改传入的DataGridViewCellFormattingEventArgs.Value,而不是基础数据。

答案 1 :(得分:0)

如果使用DataSet填充DataGridView,请在创建表时添加此代码:

DataTable dt = new DataTable();

dt.Columns.Add("ImageColumn");
dt.Columns["ImageColumn"].DataType = typeof(Byte[]);

即使您从数据库填充,也可以在将数据添加到表之前进行设置。

答案 2 :(得分:0)

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代码来摆脱这个非常烦人且耗时的错误。