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