实时图表 - 可观察值
Livecharts - Observable Value
我正在使用 LiveCharts 显示带有库存水平的条形图。单位名称和库存水平存储在访问数据库中,这些值被检索并放入列表中。
唯一真正应该改变的是股票的价值,所以我想跟踪股票的变化并自动更新数据库,提供一些实时数据。
我想要的是图表在数据库中的值(股票)发生变化时自动更新。我不想更新整个 table,只更新已更改的值,以便动画在更改时显示在各个栏上。
我有以下代码将我的数据库值加载到数据库中:
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;
}
}
图表设置:
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")
});
}
我的问题是我无法为股票实施 ObservableValue。我收到消息:“无法从 'object' 转换为
LiveCharts.Defaults.ObservableValue
LiveCharts Observable 值 expects to be initialized with a double
因此您需要将 stock
的值转换为该值,并将 ObservableValue 添加到列表而不是原始值::
stock.Add(new ObservableValue(Convert.ToDouble(reader["Stock"])));
我正在使用 LiveCharts 显示带有库存水平的条形图。单位名称和库存水平存储在访问数据库中,这些值被检索并放入列表中。
唯一真正应该改变的是股票的价值,所以我想跟踪股票的变化并自动更新数据库,提供一些实时数据。
我想要的是图表在数据库中的值(股票)发生变化时自动更新。我不想更新整个 table,只更新已更改的值,以便动画在更改时显示在各个栏上。
我有以下代码将我的数据库值加载到数据库中:
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;
}
}
图表设置:
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")
});
}
我的问题是我无法为股票实施 ObservableValue。我收到消息:“无法从 'object' 转换为 LiveCharts.Defaults.ObservableValue
LiveCharts Observable 值 expects to be initialized with a double
因此您需要将 stock
的值转换为该值,并将 ObservableValue 添加到列表而不是原始值::
stock.Add(new ObservableValue(Convert.ToDouble(reader["Stock"])));