2017-04-17 78 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的屬性添加到該對象上,然後將該對象設置爲綁定源。就像我說的,我沒有完全測試它,但它可能工作。 –