0

我试图获取 DataGridView [ dataGridView1.Rows.Count ] 的行数。我发现虽然 UI 显示 DataGridView 中已经添加了多行,但行数仍然为 0。我发现这可能是一个线程问题,所以我使用以下代码来检索行数:

public void OnTagsReported( ... )
{
  ...  

  for( var i = GetDataGridViewRowCount( dgvScanResult ) - 1; i >= 0; i-- )
  {
    var row = dgvScan.Rows[ i ];
    ...
  }  
  ...
}

protected int GetDataGridViewRowCount( DataGridView gridView )
{
  try
  {
    if( ! InvokeRequired )
    {
      return gridView.Rows.Count;
    }

    var count  = 0;
    var action = new Action<DataGridView>( delegate( DataGridView c ) 
                 { count = c.Rows.Count; } );

    gridView.Invoke( action, gridView );

    return count;
  }
  catch( ObjectDisposedException ) {}
  catch( InvalidOperationException ) {}
}

我得到了行数,但想知道这是否是正确的方法。我可以知道你会怎么做吗?

谢谢大家的关注和意见。

4

1 回答 1

0

为什么您的 OnTagsReported 方法在另一个线程中?无论如何,两条评论。

第一:是的,你可以这样做,但在 GetDataGridViewRowCount 中是一个错误。您还应该在 gridView 上调用 InvokeRequired,因为稍后您将使用 gridview.Invoke。

第二:最好在正确的线程中调用您的 OnTagsReported 方法。那么你就不需要 GetDataGridViewRowCount 方法了。

public void OnTagsReported()
{
  if (dgvScanResult.InvokeRequired)
  {
    dgvScanResult.Invoke(new MethodInvoker(OnTagsReported), null);
    return;
  }

  for( var i = dgvScanResult.Rows.Count - 1; i >= 0; i-- )
  {
    var row = dgvScan.Rows[ i ];
    ...
  }  
  ...
}
于 2012-11-22T10:41:15.517 回答