1

我正在使用dataGridViewinvirtualMode并且我尝试使用CellPainting 事件来显示行号,但是更新的事实headerCell.Value导致CellPainting事件继续在infinite loop. 我查看了 RowPostPaint,但它似乎也在无限循环中触发。当我在这段代码中时,是否有更有效的事件或禁用CellPainting事件触发的方法。

void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
  {
    if (e.ColumnIndex == -1 && e.RowIndex > -1)
    {
      dataGridView1.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
    }
  }
4

1 回答 1

0

只需在您的课程中添加一个字段,然后检查您是否曾像这样在该部分代码中

 void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if(this.theRowCountWasPainted) return;

        if (e.ColumnIndex == -1 && e.RowIndex > -1)
        {
            dataGridView1.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
            this.theRowCountWasPainted = true;
        }
    }

每当您需要重新绘制它时,只需将 this.theRowCountWasPainted 设置为 false

于 2013-08-19T13:51:42.577 回答