2012-12-21 17 views
5

Ich habe ein Datagrid, das eine Tabelle anzeigt, die an eine SQL Server-DB gebunden ist. Ich möchte alle 60 Sekunden einen Timer einstellen, der nach Updates sucht und dann die neuesten Daten anzeigt.WPF Datagrid- auto aktualisieren

Bisher habe ich eine event_handler für Datagrid erstellt, die das Objekt Dispatcher Timer

private void dataGrid1_loaded(object sender, RoutedEventArgs e) 
{ 
    DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 60); 
    dispatcherTimer.Start(); 
} 

Nun, wie ich weiß nicht, schließt mit dem Event-Handler, um fortzufahren weiterhin die neu aktualisierten Daten aus der Datenbank zu handhaben .

dispatcherTimer_Tick 

Hier ist meine Select-Anweisung, die verwendet wird, um das Datagrid zu füllen.

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     String selectstatement = "select top 2 ItemID, ItemName,ConsumerName, Street, DOJ from ConsumarTB order by ItemID "; 
     da = new SqlDataAdapter(selectstatement, con); 
     ds = new DataSet(); 
     da.Fill(ds); 
     dataGrid1.ItemsSource = ds.Tables[0].DefaultView; 

    } 
    catch (SqlException e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 

Antwort

6

Es gibt viele Möglichkeiten, das, was Sie oben haben, zu verbessern. Aber hier ist, was ich für Anfänger versuchen würde.

Im Folgenden wird Ihr Datagrid beim Laden der Seite aufgefüllt. Legen Sie einen Zeitgeber fest, der alle 60 Sekunden aktiviert wird. Wenn der Timer tickt, wird eine Methode aufgerufen, um Daten erneut in das Grid zu laden.

//On PageLoad, populate the grid, and set a timer to repeat ever 60 seconds 
private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     RebindData(); 
     SetTimer(); 
    } 
    catch (SqlException e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 

//Refreshes grid data on timer tick 
protected void dispatcherTimer_Tick(object sender, EventArgs e) 
{ 
    RebindData(); 
} 

//Get data and bind to the grid 
private void RebindData() 
{ 
    String selectstatement = "select top 2 ItemID, ItemName,ConsumerName, Street, DOJ from ConsumarTB order by ItemID "; 
    da = new SqlDataAdapter(selectstatement, con); 
    ds = new DataSet(); 
    da.Fill(ds); 
    dataGrid1.ItemsSource = ds.Tables[0].DefaultView; 
} 

//Set and start the timer 
private void SetTimer() 
{ 
    DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 60); 
    dispatcherTimer.Start(); 
} 
+0

schöne Illustration für einen Anfänger. Danke. Lass mich versuchen, zu dir zurück zu kommen. – user1221765

+1

ist eine gute Idee, dies zu erreichen, indem Sie INotifyPropertyChanged implementieren? – user1221765

+1

Dies wäre eine gute Gelegenheit, um in 'ObservableCollection 'sowie' INotifyPropertyChanged' zu schauen. Wenn Sie eine benutzerdefinierte Klasse erstellen und Ihr Raster an eine ObservableCollection binden, sollten Sie Ihre Aktualisierungen nicht erneut binden müssen. Ich schlage vor, Sie tun es nur für den WPF Bildungsbeitrag. :) – Khan