2017-04-17 77 views
2

我有几个包含BindingList的类的实例。该列表会定期更新。c# - 将多个列表绑定到多个图表系列的最佳方法

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

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

理想我想提出几个这样的名单中像一个DataTable,并刚做:

chart1.DataSource = datatable; 

再后来:

chart1.DataBind(); 

,并把所有东西更新。

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

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

我不能相信这是最好的方式。有任何想法吗?

+0

在您的UpdateVaues()中,尝试调用您的页面加载器以使用新值重新加载。 – Reddy

+0

感谢您的回复。这实际上不是一个Web应用程序,而是一个赢得表格应用程序另外'myclass'不能访问程序的其余部分。 – jmurray

回答

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

编辑:基于BindingSourceBindingList

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。

+0

谢谢!这真的很有帮助,效果很好。我仍然觉得没有更简单的方法。似乎应该有一个结构,我可以绑定到/图表,可以容纳列表(不只是采取列表的值)。例如,我可以将“DataGridView”的数据源设置为绑定列表。然后我只是将我想要的对象添加到列表中。然后对添加的对象(不仅仅是绑定列表)的改变反映在'DataGridView'中。图表数据源是否没有等价物? – jmurray

+0

好吧,我添加了另一个可能的解决方案,但我还没有完全测试它。您可以在图表上使用BindingList的BindingList和BindingSource,然后将DataMembers设置为特定的图表组件。如果DataMember需要属性名称,则可以创建一个派生自“BindingList ”的类,并将BindingList的属性添加到该对象上,然后将该对象设置为绑定源。就像我说的,我没有完全测试它,但它可能工作。 –