2017-04-03 102 views
0

我有一個DataGridView的形式,使用Backgroundworker加載數據和一個請等待的形式,以保持UI響應並顯示一個GIF,以便用戶可以看到該項目仍在工作。BackgroundWorker後刷新DataGridView?

完成後我需要用新數據以某種方式刷新DataGridView。如果我手動點擊標題來排序我的ASC或DESC,那麼它會顯示最新的數據。什麼或如何讓這個網格刷新的最佳方式?

public void btnSearch_Click(object sender, EventArgs e) 
    { 
     pleaseWait.Show(); 
     backgroundWorker1.RunWorkerAsync(); 
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     this.TestTableTableAdapter.Fill(this.TestTableData.TestTableTable, txtHotName.Text, ((System.DateTime)(System.Convert.ChangeType(txtDepartFrom.Text, typeof(System.DateTime)))), ((System.DateTime)(System.Convert.ChangeType(txtDepartTo.Text, typeof(System.DateTime)))), ((System.DateTime)(System.Convert.ChangeType(txtBookFrom.Text, typeof(System.DateTime)))), ((System.DateTime)(System.Convert.ChangeType(txtBookTo.Text, typeof(System.DateTime))))); 
    } 

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     pleaseWait.Hide(); 
    } 

上面做的是什麼,它是偉大的。我只需要一些如何刷新而不必讓最終用戶重新排列列以實際顯示刷新的數據。

+0

通常我只是清除並重新加載到DataGridView中的信息,但我很久沒有使用過DGV,並且可能有更好的方法。堅持發現! –

+1

將數據添加到DGV時,重新繪製方法不會自動調用。所以訣竅是設置datagridview1.DataSource = null,然後回到實際的數據源。 – jdweng

回答

0

繼jdweng的評論之後;

將數據 添加到DGV時,不會自動調用重新繪製方法。所以訣竅是設置datagridview1.DataSource = null, ,然後回到實際的數據源。

這固定了我的選擇。隨着我的標準發生變化,我的gif仍然在旋轉,UI更新。

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     pleaseWait.Hide(); 
     this.TestTableTableDataGridView.DataSource = null; 
     this.TestTableTableDataGridView.DataSource = TestTableTableBindingSource; 
    }