Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-将多个列表绑定到多个图表系列的最佳方法_C#_Winforms - Fatal编程技术网

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

c#-将多个列表绑定到多个图表系列的最佳方法,c#,winforms,C#,Winforms,我有几个包含绑定列表的类实例。该清单定期更新 public class myclass { public BindingList<double> values; public string name; //....code public void UpdateVaues() { //Get somevalue values.Add(somevalue); } } 后来: chart1.DataBind

我有几个包含
绑定列表的类实例。该清单定期更新

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

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

chart1.DataBind();
把一切都更新了

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

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

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

如果您正在寻找一个具有多个绑定的源,那么可以将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();
    }
}

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

在UpdateVaues()中,尝试调用页面加载器以重新加载新值。感谢您的回复。这实际上不是一个web应用程序,而是一个win forms应用程序。另外,
myclass
无法访问程序的其余部分。谢谢!这真的很有帮助,效果很好。我仍然为没有更简单的方法而烦恼。似乎应该有一个可以绑定到/chart的结构来保存列表(而不仅仅是获取列表的值)。例如,我可以将
DataGridView
的数据源设置为绑定列表。然后我只需将我想要的对象添加到列表中。对添加的对象(不仅仅是绑定列表)的更改将反映在
DataGridView
中。对于图表数据源,没有等效的解决方案吗?我添加了另一个可能的解决方案,但我还没有完全测试它。您可以将BindingList的BindingList与图表上的BindingSource一起使用,然后将DataMembers设置为特定的图表组件。如果DataMember需要属性名,可以创建一个从
BindingList派生的类
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();
    }
}
    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;
    }