C# 在尝试显示datagridview c的行号时,我应该连接到的最有效的事件是什么#

C# 在尝试显示datagridview c的行号时,我应该连接到的最有效的事件是什么#,c#,datagridview,C#,Datagridview,我正在virtualMode中使用dataGridView,我尝试使用CellPaint事件来显示行号,但更新headerCell.Value的事实导致CellPaint事件在无限循环中继续触发。我看了RowPostPaint,但这似乎也是一个无限循环。当我在这段代码中时,是否有一个更有效的事件或者一种禁用CellPaint事件触发的方法 void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArg

我正在
virtualMode
中使用
dataGridView
,我尝试使用CellPaint事件来显示行号,但更新
headerCell.Value
的事实导致CellPaint事件在
无限循环中继续触发。我看了RowPostPaint,但这似乎也是一个无限循环。当我在这段代码中时,是否有一个更有效的事件或者一种禁用CellPaint事件触发的方法

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

只需向类中添加一个字段,并检查您以前是否参与过类似的代码部分

 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.therowcountwaspained设置为false

请告诉我们您的版本是否为VS,如果您的版本为Winforms或Asp.net或WPF或其他任何版本,请告诉我们,这将对VS2010和Winform应用程序有所帮助