2016-03-30 14 views
0

私はDataGridをC#WPFに入れました。これはEmployeesで埋められています。基本的に私はDatabaseから定期的に読む必要があります。Employeesがフィールドに入ると、フィールドが変更されます。私はこのような状況に近づく最善の方法についていくつかの問題を抱えています。まず、これは私がDataGridを定義する方法です。DataGridを定期的にリフレッシュするC#WPF

public ICollectionView FilteredView { get; set; } 
public ObservableCollection<EmployeeModel> Employees {get; set; } 

private void OnPageLoad(object sender, RoutedEventArgs e) 
{ 
    var _employeeDataService = new EmployeeDataService(); 
    Employees = _employeeDataService.HandleEmployeeSelect(); 
    FilteredView = CollectionViewSource.GetDefaultView(Employees); 
    dataGrid.ItemsSource = FilteredView; 
    DataContext = this; 

    System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); 
    dispatcherTimer.Tick += new EventHandler(TimerTick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 1); 
    dispatcherTimer.Start(); 
} 

テーブル全体をデータベースと適切なフィールド(ユーザが建物内にあるか否かが更新される)から検索されるように、本質的に、現在、毎秒を発射TimerTick方法は単に、再度このメソッドを呼び出します。

私が言ったように、この方法にはいくつかの問題があります。まず、それは良く見えません。 DataGridが常にリフレッシュされるため、ユーザーがグリッド上で実行するアクションは遅く、各行の強調表示が歪んで表示されます。

第2に、DataGridをフィルタリングする方法を使用します。ユーザーはEmployeeの名前を入力でき、それに応じてDataGridがフィルタリングされます。もう一度DataGridが1秒ごとに更新されるため、DataGridでフィルタリングすることは文字通り不可能です。ユーザータイプがすべて毎秒元に戻されるからです。

DataGridは、1分ごとに改善される可能性があると私は理解していますが、理想的なところではまだいいですし、良い解決策があると確信しています。 DataGridの更新が、ユーザーにとってより微妙で不明なので、このソリューションを改善するにはどうすればよいですか?

+0

質問:なぜDataGridを頻繁に更新する必要がありますか? そして、毎秒プロパティの更新や、ビューのdatacontextの再設定はしていますか? –

+1

私はデータベースからすべてのデータを取得できないということを提案します。まず、データベース内で変更があったかどうかを確認します。その関数がデータベースからデータをフェッチするだけである場合はtrueです。 (データを取得するスレッドを使用) –

+0

@ VivekSaurav基本的に、従業員が建物に出入りする際の監視システムです。現時点では、私はdatacontextをリセットしていますが、その目的は避けることだと思います。 – CBreeze

答えて

0

コレクション全体を更新する代わりに、実際に異なるか変更されたObservableCollectionのアイテムのみを追加、移動、削除します。これは、INotifyCollectionChangedINotifyPropertyChangedを実装しており、DataGridに通知します。

+0

'ObservableCollection'で' Employee'を更新する方法は同じですか? – CBreeze

+0

'Employee'が' INotifyPropertyChanged'インターフェースを実装し、ビュー内のカラムがデータバインディングを使用して選択されている場合はyesです。列の値が変更された場合、そのプロパティの名前を持つインタフェースからイベントを呼び出すだけです。 https://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspxを参照してください。 – Kolky

関連する問題