2012-12-21 38 views
5

Tôi có một biểu đồ dữ liệu hiển thị bảng được liên kết với máy chủ SQL DB. Tôi muốn đặt Bộ hẹn giờ trong mỗi 60 giây, kiểm tra mọi cập nhật và sau đó hiển thị dữ liệu cập nhật mới nhất.WPF Datagrid- tự động làm mới

Cho đến nay tôi đã tạo ra một event_handler cho DataGrid, bao gồm các đối tượng điều phối 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(); 
} 

Bây giờ tôi không biết làm thế nào để tiến hành thêm với các xử lý sự kiện để xử lý các dữ liệu mới được cập nhật từ cơ sở dữ liệu .

dispatcherTimer_Tick 

Đây là tuyên bố chọn của tôi được sử dụng để lấp đầy DataGrid.

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); 
    } 
} 

Trả lời

6

Có rất nhiều cách để cải thiện những gì bạn có ở trên. Nhưng đây là những gì tôi sẽ cố gắng cho người mới bắt đầu.

Dưới đây sẽ điền dữ liệu của bạn vào tải trang, đặt hẹn giờ để đánh dấu sau mỗi 60 giây. Khi bộ đếm thời gian đánh dấu, nó sẽ gọi một phương thức để tải dữ liệu vào lưới một lần nữa.

//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

minh họa đẹp cho người mới bắt đầu. cảm ơn bạn. hãy để tôi thử và lấy lại cho bạn. – user1221765

+1

sẽ là một ý tưởng tốt để đạt được điều này bằng cách triển khai INotifyPropertyChanged? – user1221765

+1

Đây sẽ là cơ hội tuyệt vời để xem xét 'ObservableCollection 'cũng như' INotifyPropertyChanged'. Nếu bạn tạo một lớp tùy chỉnh và liên kết lưới của bạn với một 'ObservableCollection ', bạn không cần phải rebind về các bản cập nhật của mình. Tôi đánh giá cao đề nghị bạn làm điều đó chỉ vì lợi ích giáo dục của WPF. :) – Khan