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

时间:2017-04-17 16:15:14

标签: c# winforms

我有一个包含count的类的几个实例。该列表会定期更新。

count

理想情况下,我想将其中的几个列表放在像DataTable这样的内容中,然后执行:

BindingList

然后是:

public class myclass
{
    public BindingList<double> values;
    public string name;
    //....code

    public void UpdateVaues()
    {
        //Get somevalue
        values.Add(somevalue);
    }
}

并将所有内容更新。

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

chart1.DataSource = datatable;

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

1 个答案:

答案 0 :(得分:0)

如果您正在寻找具有多个绑定的一个源,则可以将DataSet与DataTables和ObservableCollection一起使用。

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;
    }

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