【问题标题】:Display database values that are changed dynamically and change the value of the progressbar显示动态更改的数据库值并更改进度条的值
【发布时间】:2016-05-25 06:07:58
【问题描述】:

我是 c# 和 wpf 的新手。我创建了一个 SQL Server 数据库表,它显示在我的 wpf 表中。我的问题是我希望初始显示表为空,并且在数据库表中添加值时,它应该反映在显示表上。然后,此动态过程应链接到我的进度条,每次显示新值时,进度条都会更改 10%。

因此需要自动刷新文本块(例如每 10 秒)以检查数据库中是否已更新新值,然后显示该值并更改进度。

我该怎么做?

这是我的进度条代码。

private void loadprogressbar()
{
        Duration dur = new Duration(TimeSpan.FromSeconds(30));
        DoubleAnimation dblani = new DoubleAnimation(200.0, dur);
        pb1.BeginAnimation(ProgressBar.ValueProperty, dblani);
}

这是我的显示表代码。

private void WeightVital()
{
        SqlConnection con = new SqlConnection("Data Source=DESKTOP-QTFGN00; Initial Catalog=VITALS;Integrated Security=true");

        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT Weight FROM Vitals WHERE(VitalsID = 1)", con);
        cmd.CommandType = CommandType.Text;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.SelectCommand = cmd;
        DataSet dataset = new DataSet();
        da.Fill(dataset);

        if(dataset.Tables[0].Rows.Count>0)
        {
            string weight = dataset.Tables[0].Rows[0]["Weight"].ToString();
            textBlock18.Text = weight;
        }
}

private void HeightVital()
{
        SqlConnection con = new SqlConnection("Data Source=DESKTOP-QTFGN00; Initial Catalog=VITALS;Integrated Security=true");

        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT Height FROM Vitals WHERE(VitalsID = 1)", con);
        cmd.CommandType = CommandType.Text;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.SelectCommand = cmd;
        DataSet dataset = new DataSet();
        da.Fill(dataset);

        if (dataset.Tables[0].Rows.Count > 0)
        {
            string height = dataset.Tables[0].Rows[0]["Height"].ToString();
            textBlock19.Text = height;
        }
}

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: c# sql-server wpf database dynamic


    【解决方案1】:

    0) 创建一个对象来代表您的“重要”行

    1) 将 ObservableCollection<Vital> 绑定到 DataGrid 的 ItemSource

    <DataGrid ItemsSource="{Binding vitalList}" />
    

    2) 用您的数据填写此ObservableCollection&lt;T&gt;

    vitalList.Add(myNewVital);
    

    3) 由于 ObservableCollection 会在添加/删除或更改项目时触发事件,因此请将处理程序添加到 ObservableCollection 的 CollectionChanged 事件中,然后添加您的 pourcentage 或根据 Collection 的 Count 属性计算它

    vitalList.CollectionChange += myProgressBarHandler;
    

    【讨论】:

    • 我创建了一个 ObservableCollection 并将所有传入的值设置到一个工作正常的数据表中。我的查询显示在数据网格中,但如果我的数据库值更新,我的 UI 不会自动更新(我需要退出屏幕并再次运行我的应用程序才能显示新值。)请帮助。如果您愿意,我可以在这里发布我的代码。谢谢
    • 您的应用程序不知道数据库的当前状态是什么。当您 Add(或编辑/删除)元素时,ObservableCollection 将触发 CollectionChange 事件。因此,您的应用程序需要再次运行查询(基于时间、事件、其他任何内容……),并将以前不存在的项目添加到集合中。如果需要,您还可以重新分配整个集合。确保你也提出 INotifyPropertyChanged
    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 2023-03-14
    • 1970-01-01
    • 2018-08-05
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多