我正在开发一个Word-Addin项目(仅供参考,特别是在性能方面)。我有一个DataGridView,我在运行时填充数据。 问题是我在DataGridView中填充的大量数据(通常以百万计)来自一个webService调用,这个调用在响应调用时不可避免需要10-20秒。 gridView上还有搜索功能,我不想调用web-Service,因为我知道DataGridView在搜索GridView时非常有效。我希望以异步方式填充数据,以便最终用户不必等待响应,并且单词也不会冻结。 我可以使用线程池以异步方式填充数据,但搜索功能可能不明确。 任何想法如何处理这种情况? 我感谢任何帮助。 谢谢 此致
答案 0 :(得分:0)
您可以使用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);
CellValueNeeded可能看起来像这样
private void dataGridView1_CellValueNeeded(object sender , DataGridViewCellValueEventArgs e)
{
e.Value = $"Row {e.RowIndex} , Column {e.ColumnIndex}";
}