将多个列表绑定到多个图表系列的最佳方法



我有几个包含BindingList的类的实例。列表定期更新。

public class myclass
{
    public BindingList<double> values;
    public string name;
    //....code
    public void UpdateVaues()
    {
        //Get somevalue
        values.Add(somevalue);
    }
}

理想情况下,我想将其中几个列表放入数据词中,然后做:

chart1.DataSource = datatable;

然后稍后:

chart1.DataBind();

并更新所有内容。

目前,我只是一次不断地重新固定每个列表:

//Inside main form
chart1.Series["one"].Points.DataBindY(myclass1.values);
chart1.Series["two"].Points.DataBindY(myclass2.values);
//...

我不敢相信这是最好的方法。有什么想法吗?

如果您正在寻找具有多个绑定的源,则可以将数据集与数据集使用和观察力。

public class myclass
{
    public DataSet dataSet = new DataSet();
    public DataTable dt1;
    public DataTable dt2;
    public ObservableCollection<double> values1;
    public ObservableCollection<double> values2;
    public myclass() {
        values1.CollectionChanged += values1Changed;
    }
    public void CreateTables()
    {
        // Create the DataSet
        // Create the Data Tables
        dt1 = new DataTable();
        dt2 = new DataTable();
        dataSet.Tables.Add(dt1);
        dataSet.Tables.Add(dt1);
        chart1.DataSource = dataSet;
    }
    private void values1Changed(object sender, NotifyCollectionChangedEventArgs args)
    {
        //Get somevalue (what changed)
        dt1.Rows.Add(somevalue);
        chart1.DataBind();
    }
}

编辑:基于BindingSource的另一种可能的解决方案,具有多个BindingList

    public BindingSource bindingSource { get; set; } = new BindingSource();
    public BindingList<BindingList<double>> bindingList { get; set; } = new BindingList<BindingList<double>>();
    public BindingList<double> values1 { get; set; } = new BindingList<double>();
    public BindingList<double> values2 { get; set; } = new BindingList<double>();
    public Form1()
    {
        InitializeComponent();
        bindingList.Add(values1);
        bindingList.Add(values2);
        bindingSource.DataSource = bindingList;
        chart1.DataSource = bindingSource;
    }

免责声明:我尚未对此进行全面测试,但是您可以查看它是否有效。您还需要在图表上设置DataMember。

最新更新