2014-02-06 2 views
0

그래서 쿼리를 실행하고 결과를 DataTable에 저장하는 SQL DB2 연결이 있습니다. 이 DataTable은 DataGrid에로드됩니다. 쿼리는 자체 스레드에서 실행되고 디스패처를 사용하여 UI를 업데이트합니다. 여기 C# WPF - SQL 실행 중 데이터 표시

내 코드 예제입니다 :

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 행을 수집 된 데이터를 푸시하려면 어떻게 나는 이것을합니까? 간단히 말해, 쿼리가 실행되는 동안 결과를 데이터 격자에 어떻게 바인드합니까? 당신의 DataGrid (즉 ObservableCollection의 전망이다 또는 더 나은 아직 CollectionViewSource에) ObservableCollection에 바인딩

당신은 내가 그것뿐만 아니라 DB2Connection을 위해 작동 할 가정 SQL 서버에 대한 해결책을 가지고 있다면 ...

답변

0

, DataTable이 아니며 ObservableCollection에 항목 묶음을 추가하면 DataGrid이 자동으로 업데이트되어 새 항목이 표시됩니다.

+0

그래, 내가이 길을 가면 어떻게 쿼리의 결과로 ObservableCollection을 업데이트합니까? SQLConnection 또는 DB2Conneciton이 쿼리를 통해 데이터를 중간에 보내도록하는 방법이 있습니까? –

+0

BackgroundWorker를 사용하여 작업 진행 상황을보고하는 방법을 알려주고 ReportProgress 메서드에서 ObservableCollection을 업데이트 할 수 있습니다. –

+0

TPL 및 ContinueWith를 사용하는 것이 더 나았습니다 ... –