2016-09-21 84 views
-1

我正在開發一個Word-Addin項目(僅供參考,特別是在性能方面)。我有一個DataGridView,我在運行時填充數據。 問題是我在DataGridView中填充的大量數據(通常以百萬爲單位)來自webService調用,它在響應該調用時非常困難地需要10-20秒。此外,gridView上還有搜索功能,我不想調用web-Service,因爲我知道DataGridView在通過GridView進行搜索時非常高效。我想以異步方式填充數據,以便最終用戶不必等待響應,並且word也不會凍結。 我可以使用線程池以異步方式填充數據,但搜索功能將不明確。 任何想法如何處理這種情況? 我感謝任何幫助。 謝謝 關注如何有效地將數據填充到winform DataGridView異步?

+0

所有單詞和無碼使傑克的問題稍顯沉悶。 –

+0

感謝您的反饋意見,我沒有包含代碼,因爲我需要任何替代方案但有效的方法如何做到這一點。我正在執行的是一種常見的方法,顯然你知道。我不認爲包含代碼是有道理的。如果我出錯了,請原諒我 –

+0

你是對的。您的特定問題不需要代碼來回答,但是如果我們想要幫助您找到更有效的方法,那麼包含您當前解決方案的一部分將會有所幫助。附:我不是downvoter。 :p –

回答

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}"; 
}