图表数据绑定到数据表 - 图表未更新

本文关键字:更新 数据绑定 数据表 | 更新日期: 2023-09-27 18:31:00

我正在尝试将Chart数据绑定到DataTable。我希望图表在添加新行时显示新行,但是将新行添加到表中时图表不会更新。我已经验证了tabletableDataSource都包含新行,但chart.Series["TestTable"].Points.Count永远不会从5更改。

基于问题"无法将数据表绑定到图表控件"的示例代码如下所示。我想知道下面的代码是否存在错误或遗漏,或者实现相同目标的不同、更好的方法。我知道如何手动向Series添加点,但我想看看如何使用数据绑定来做到这一点。

Random r = new Random();
Timer timer = new Timer();
DataTable table = new DataTable("TestTable");
DateTime date = new DateTime(2013, 1, 1);
IList tableDataSource = null;
void timer_Tick(object sender, EventArgs e)
{
    table.Rows.Add(date, r.NextDouble());
    date = date.AddDays(1);
    chart.Update();
}
void MainForm_Load(object sender, EventArgs e)
{
    table.Columns.Add("Date", typeof(DateTime));
    table.Columns.Add("Percent", typeof(double));
    for (int i = 0; i < 5; i++)
    {
        table.Rows.Add(date, r.NextDouble());
        date = date.AddDays(1);
    }
    tableDataSource = (table as IListSource).GetList();
    chart.DataBindTable(tableDataSource, "Date");
    timer.Interval = 500;
    timer.Tick += new EventHandler(timer_Tick);
    timer.Start();
}

图表数据绑定到数据表 - 图表未更新

尝试将该表用作数据源:

// tableDataSource = (table as IListSource).GetList();
// chart.DataBindTable(tableDataSource, "Date");
chart.Series.Add("test");
chart.Series["test"].XValueMember = "Date";
chart.Series["test"].YValueMembers = "Percent";
chart.DataSource = table;
chart.DataBind();

然后在 tick 事件中,再次调用 DataBind 而不是 Update:

void timer_Tick(object sender, EventArgs e) {
  table.Rows.Add(date, r.NextDouble());
  date = date.AddDays(1);
  //chart.Update();
  chart.DataBind();
}