如何有效地将数据异步填充到winform DataGridView中

本文关键字:winform DataGridView 填充 异步 有效地 数据 | 更新日期: 2023-09-27 18:08:15

我正在做一个Word-Addin项目(仅供参考,特别是在性能方面)。我有一个DataGridView,我在运行时填充数据。问题是我在DataGridView中填充的大量数据(通常以百万计)来自webService调用,不幸的是,响应调用需要10-20秒。还有gridView上的搜索功能,我不想调用web-Service,因为我知道DataGridView在通过gridView搜索时非常有效。我想以异步方式填充数据,这样终端用户就不必等待响应,而且单词也不会冻结。我可以使用线程池以异步方式填充数据,但搜索功能可能不明确。知道如何处理这种情况吗?谢谢你的帮助。谢谢关于

如何有效地将数据异步填充到winform DataGridView中

你可以使用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}";
}