gpt4 book ai didi

c# - 如何在 sql server 上更新 ItemsSource 时自动刷新数据网格项目

转载 作者:行者123 更新时间:2023-11-30 17:07:41 25 4
gpt4 key购买 nike

我经历过许多相同类型的问题,但找不到正确的解决方案。我已经为我的 MainViewModel.cs 类实现了 INotifyPropertyChanged 以查看我的 UI 是否在我的源更改时更新,但是当我运行我的应用程序时没有任何效果。

这是我的 Xaml 代码:

<Window.DataContext>
<ViewModel:MainViewModel/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding Path=SystemStatusData,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"
AutoGenerateColumns="False" Height="287" HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="479" >

我的 MainViewModel.cs 类:

namespace MVVM_DemoAppl.ViewModels
{
public class MainViewModel : INotifyPropertyChanged
{
Model _myModel = new Model();
private ObservableCollection<SystemStatus> _systemStatusData= new ObservableCollection<SystemStatus>();
public ObservableCollection<SystemStatus> SystemStatusData
{
get { return _systemStatusData; }
set
{
_systemStatusData= value;
OnPropertyChanged("SystemStatusData");
}
}

public MainViewModel()
{
initializeload();
}

private void initializeload()
{
DataTable table = _myModel.getData();

for (int i = 0; i < table.Rows.Count; ++i)
SystemStatusData.Add(new SystemStatus
{
Systems= table.Rows[i][0].ToString(),
Date =Convert.ToDateTime(table.Rows[i][1]),
Types = table.Rows[i][2].ToString(),
Messages = table.Rows[i][3].ToString()
Critical = Convert.ToBoolean(table.Rows[i][1]),
});
}

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string propertyname)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyname));
}
}

public class Model
{
string con = ConfigurationManager.AppSettings["ConnectionStrings"];
public DataTable getData()
{
DataTable ndt = new DataTable();
SqlConnection sqlcon = new SqlConnection(con);
sqlcon.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from test_DB.dbo.SystemStatus",con);
da.Fill(ndt);
return ndt;
}
}
}

最佳答案

SQL Server 不会在查询首次运行后自动更新您的结果集。实现您所追求的目标的最基本方法是轮询服务器以按设定的时间间隔检查更改并从那里更新屏幕。

你可以看看CDC这将有助于确定发生了什么变化(如果有的话)。不过这些都不是自动的,您每次都需要重新运行查询。

计时器如何工作的示例:

// Background timer used to refresh...
private DispatcherTimer _timer = null;

public MainViewModel()
{
// Do initial load
initializeload();

// Start the timer to refresh every 100ms thereafter (change as required)
_timer = new DispatcherTimer();
_timer.Tick += Each_Tick;
_timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
_timer.Start();
}

// Raised every time the timer goes off
private void Each_Tick(object o, EventArgs sender)
{
// Refresh from database etc ...
initializeload();

// Anything else you need ...
}

private void initializeload()
{
// Your existing code here ...
}

关于c# - 如何在 sql server 上更新 ItemsSource 时自动刷新数据网格项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com