【问题标题】:C# WPF - Display Data during SQL ExecutionC# WPF - 在 SQL 执行期间显示数据
【发布时间】:2014-02-06 19:13:50
【问题描述】:

好的,我有一个 SQL DB2 连接,它运行一个查询并将结果存储到一个 DataTable 中。然后将此 DataTable 加载到 DataGrid 中。该查询也在它自己的线程中运行,并使用调度程序来更新 UI。

这是我的代码示例:

using(DB2Connection conn = new DB2Connection("xyz"))
{
    string DB2Query = query;
    if(conn.State == ConnectionState.Closed) conn.Open();
    DB2Command cmd = new DB2Command(DB2Query, conn);
    cmd.CommandType = System.Data.CommandType.Text;
    DB2DataAdapter adapter = new DB2DataAdapter(cmd);

    DataTable ds = new DataTable();
    adapter.Fill(ds);
    this.Dispatcher.Invoce((Action)(() =>
    {
        Data.ItemsSource = ds.DefaultView;
        Results.SelectedItem = Results.Items.GetItemAt(0);
        Errors.Text = "Query Ran Successfully!!! \n" + "Total Rows: " + ds.Rows.Count;
    }));
    conn.Dispose();
    conn.Close();
}

我的问题是……如果我有一个查询 1,000,000 行,并且我想每 10,000 行推送一次收集的数据,我该怎么做?简而言之,如何在查询仍在运行时将结果绑定到数据网格?

如果您有 sql-server 的解决方案,我认为它也适用于 DB2Connection...

【问题讨论】:

    标签: c# sql wpf datagrid db2


    【解决方案1】:

    将您的DataGrid 绑定到ObservableCollection(或者最好绑定到CollectionViewSource,这是ObservableCollection 的视图),而不是DataTable,并且当您将一批项目添加到@987654326 @您的DataGrid 将自动更新以显示新项目。

    【讨论】:

    • 好的,如果我走这条路,我该如何用查询结果更新 ObservableCollection?有没有办法让 SQLConnection 或 DB2Conneciton 在查询中途发回数据?
    • 您可以使用 BackgroundWorker,告诉它多久报告一次操作进度,并在其 ReportProgress 方法中更新您的 ObservableCollection...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多