我试图获取 DataGridView [ dataGridView1.Rows.Count ] 的行数。我发现行计数仍然是 0,尽管 UI 显示已在 DataGridView 中添加了多行。我发现这可能是一个线程问题,所以我使用以下代码来检索行计数:
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 ) {}
}
我得到了行数,但想知道这是否是正确的方法。我可以知道你会怎么做吗?
谢谢大家的关注和意见。
为什么你的 OnTagsReporting 方法在另一个线程中?无论如何,两条评论。
首先:是的,你可以这样做,但在GetDataGridViewRowCount中是一个错误。您也应该在 gridView 上调用 InvokeRequired,因为您使用的是 gridview。稍后调用。
第二:最好在正确的线程中调用您的 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 ];
...
}
...
}