0

我尝试使用以下两个代码示例,并且都删除了红色 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;
4

3 回答 3

0

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

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

于 2012-06-14T18:19:27.963 回答
0

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

DataTable dt = new DataTable();

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

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

于 2012-06-14T19:17:44.783 回答
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 代码来摆脱这个非常烦人且耗时的错误。

于 2014-09-28T06:46:57.160 回答