如何有效地将数据异步填充到winform DataGridView中
本文关键字:winform DataGridView 填充 异步 有效地 数据 | 更新日期: 2023-09-27 18:08:15
我正在做一个Word-Addin项目(仅供参考,特别是在性能方面)。我有一个DataGridView,我在运行时填充数据。问题是我在DataGridView中填充的大量数据(通常以百万计)来自webService调用,不幸的是,响应调用需要10-20秒。还有gridView上的搜索功能,我不想调用web-Service,因为我知道DataGridView在通过gridView搜索时非常有效。我想以异步方式填充数据,这样终端用户就不必等待响应,而且单词也不会冻结。我可以使用线程池以异步方式填充数据,但搜索功能可能不明确。知道如何处理这种情况吗?谢谢你的帮助。谢谢关于
你可以使用VirtualMode。它的作用是当你的DataGridView想要显示一个项目时,它会从一个事件中获取它,而不是一次加载它们
// Enable virtual mode.
this.dataGridView1.VirtualMode = true;
// Connect the virtual-mode events to event handlers.
this.dataGridView1.CellValueNeeded += new
DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded);
this.dataGridView1.CellValuePushed += new
DataGridViewCellValueEventHandler(dataGridView1_CellValuePushed);
this.dataGridView1.NewRowNeeded += new
DataGridViewRowEventHandler(dataGridView1_NewRowNeeded);
this.dataGridView1.RowValidated += new
DataGridViewCellEventHandler(dataGridView1_RowValidated);
this.dataGridView1.RowDirtyStateNeeded += new
QuestionEventHandler(dataGridView1_RowDirtyStateNeeded);
this.dataGridView1.CancelRowEdit += new
QuestionEventHandler(dataGridView1_CancelRowEdit);
this.dataGridView1.UserDeletingRow += new
DataGridViewRowCancelEventHandler(dataGridView1_UserDeletingRow);
cellvaluenneeded可能看起来像这样
private void dataGridView1_CellValueNeeded(object sender , DataGridViewCellValueEventArgs e)
{
e.Value = $"Row {e.RowIndex} , Column {e.ColumnIndex}";
}