2017-04-03 105 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; 
    }