[英]c# - Best way to bind multiple lists to multiple chart series
I have several instances of a class containing a BindingList
. 我有一个包含BindingList
的类的几个实例。 The list is updated periodically. 该列表会定期更新。
public class myclass
{
public BindingList<double> values;
public string name;
//....code
public void UpdateVaues()
{
//Get somevalue
values.Add(somevalue);
}
}
Ideally I would like to put several of these lists in something like a DataTable and just do: 理想情况下,我想将这些列表中的几个放在类似DataTable的地方,然后执行以下操作:
chart1.DataSource = datatable;
And then later: 然后再:
chart1.DataBind();
and have everything updated. 并更新所有内容。
Currently I am just constantly rebinding each list one at a time: 目前,我只是不断地一次重新绑定每个列表:
//Inside main form
chart1.Series["one"].Points.DataBindY(myclass1.values);
chart1.Series["two"].Points.DataBindY(myclass2.values);
//...
I can't believe this is the best way. 我不敢相信这是最好的方法。 Any ideas? 有任何想法吗?
You could use DataSet with DataTables and an ObservableCollection if you are looking for one source with multiple bindings. 如果要查找具有多个绑定的一个源,则可以将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();
}
}
Edit: Another possible solution based on BindingSource
with multiple BindingList
编辑:另一个可能的解决方案基于具有多个BindingList
BindingSource
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;
}
Disclaimer: I haven't fully tested this but you can see if it works. 免责声明:我尚未对此进行全面测试,但是您可以查看它是否有效。 You will also need to set the DataMembers on the chart. 您还需要在图表上设置DataMembers。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.