C# 动态图表-可观察值

C# 动态图表-可观察值,c#,winforms,livecharts,C#,Winforms,Livecharts,我正在使用LiveCharts显示带有库存水平的条形图。单位名称和库存水平存储在access数据库中,这些值将被检索并放入列表中 唯一真正应该改变的是股票的价值,所以我想跟踪股票的变化并自动更新数据库,提供一些实时数据 我想让图表在数据库中的值(股票)发生变化时自动更新。我不想更新整个表,只想更新已更改的值,以便在更改动画时在各个条上显示动画 我有以下代码用于将数据库值加载到数据库中: string[] units = new string[30]; List<string

我正在使用LiveCharts显示带有库存水平的条形图。单位名称和库存水平存储在access数据库中,这些值将被检索并放入列表中

唯一真正应该改变的是股票的价值,所以我想跟踪股票的变化并自动更新数据库,提供一些实时数据

我想让图表在数据库中的值(股票)发生变化时自动更新。我不想更新整个表,只想更新已更改的值,以便在更改动画时在各个条上显示动画

我有以下代码用于将数据库值加载到数据库中:

    string[] units = new string[30];
    List<string> subs = new List<string>();
    List<string> line = new List<string>();
    List<double> min = new List<double>();
    List<double> max = new List<double>();
    List<ObservableValue> stock = new List<ObservableValue>();

    bool initial = true;
    private void LoadData()
    {
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\subDB.mdb";

        using (OleDbConnection conn = new OleDbConnection(strConn))
        {
            conn.Open();
            string strSQL = "SELECT * FROM Units";
            OleDbCommand command = new OleDbCommand(strSQL, conn);

            using (OleDbDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (initial)
                    {
                        subs.Add(reader["Sub"].ToString());
                        line.Add(reader["Line"].ToString());
                        min.Add(Convert.ToDouble(reader["Minimum"]));
                        max.Add(Convert.ToDouble(reader["Maximum"]));
                    }
                        stock.Add(reader["Stock"]);
                }
            }
            initial = false;
        }
    }
string[]单位=新字符串[30];
List subs=新列表();
列表行=新列表();
列表最小值=新列表();
列表最大值=新列表();
列表库存=新列表();
bool initial=true;
私有void LoadData()
{
字符串strConn=@“Provider=Microsoft.Jet.OLEDB.4.0;数据源=C:\Database\subDB.mdb”;
使用(OLEDB连接连接=新OLEDB连接(strConn))
{
conn.Open();
string strSQL=“选择*来自单位”;
OleDbCommand命令=新的OleDbCommand(strSQL,conn);
使用(OleDbDataReader=command.ExecuteReader())
{
while(reader.Read())
{
if(首字母)
{
添加(读卡器[“Sub”].ToString());
line.Add(读卡器[“line”].ToString());
min.Add(Convert.ToDouble(读卡器[“最小”]);
max.Add(Convert.ToDouble(读卡器[“max”]);
}
添加(读卡器[“股票]);
}
}
初始值=假;
}
}
图表设置:

    public void chartSetup()
    {
        cartesianChart1.Series = new SeriesCollection
        {
            new ColumnSeries
            {
                Title = "Total",
                Fill = System.Windows.Media.Brushes.Crimson,                 
                Values = new ChartValues<ObservableValue>(stock)
            }
        };
        cartesianChart1.AxisX.Add(new Axis
        {
            Title = "Unit",
            FontSize = 15,
            Separator = new Separator
            {
                Step = 1,
                IsEnabled = false //disable it to make it invisible.
            },
            LabelsRotation = 45,
            Labels = new ChartValues<string>(subs)
        });

        cartesianChart1.AxisY.Add(new Axis
        {
            Title = "Total",
            FontSize = 15,
            ShowLabels = true,
            LabelFormatter = value => value.ToString("N")
        });
    }
public void chartSetup()
{
cartesianChart1.Series=新系列集合
{
新专栏系列
{
Title=“总计”,
Fill=System.Windows.Media.brusks.Crimson,
值=新图表值(库存)
}
};
cartesianChart1.axix.Add(新轴
{
Title=“单位”,
FontSize=15,
分离器=新分离器
{
步骤=1,
IsEnabled=false//禁用它以使其不可见。
},
标签旋转=45,
标签=新图表值(SUB)
});
cartesianChart1.AxisY.Add(新轴
{
Title=“总计”,
FontSize=15,
ShowLabels=true,
LabelFormatter=value=>value.ToString(“N”)
});
}
我的问题是我无法为股票实现ObservalEvalue。我得到的信息是:“无法从‘对象’转换为
LiveCharts.Defaults.ObservableValue

LiveCharts的可观察值,因此您需要将
股票的值转换为该值,并将可观察值而不是原始值添加到列表中:

stock.Add(new ObservableValue(Convert.ToDouble(reader["Stock"])));

“无法从'double'转换为LiveCharts.Defaults.observeValue当我尝试时,谢谢,这绝对有效!但是当一个值改变时,图表似乎不会更新。