How to bind DataTable to Chart series?

Posted by user175908 on Stack Overflow See other posts from Stack Overflow or by user175908
Published on 2011-01-02T11:24:35Z Indexed on 2011/01/02 11:54 UTC
Read the original article Hit count: 429

Hello,

How to do bind data from DataTable to Chart series? I get null reference exception. I tried binding with square brackets and it did not worked either. So, how to do the binding?

Thanks.

P.S:
I included DataGrid XAML and CS which works just fine.
Converting data to List<KeyValuePair<string,int>> works good but it is kinda slow and is unnessesary trash in code.
I use WPFToolkit (the latest version).

XAML:

<Window x:Class="BindingzTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="606" Width="988" xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit">
<Grid Name="LayoutRoot">
    <charting:Chart Title="Letters and Numbers" VerticalAlignment="Top" Height="400">
        <charting:Chart.Series>
            <charting:ColumnSeries Name="myChartSeries" IndependentValueBinding="{Binding Letter}" DependentValueBinding="{Binding Number}" ItemsSource="{Binding}" />
        </charting:Chart.Series>
    </charting:Chart>
    <DataGrid Name="myDataGrid" VerticalAlignment="Stretch" Margin="0,400,0,50" ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Letter" Binding="{Binding Letter}"/>
            <DataGridTextColumn Header="Number" Binding="{Binding Number}"/>
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Generate" HorizontalAlignment="Left" Name="generateButton" Width="128" Click="GenerateButtonClicked" Height="52" VerticalAlignment="Bottom" />
</Grid>

CS:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    DataTable GenerateMyTable()
    {
        var myTable = new DataTable("MyTable");

        myTable.Columns.Add("Letter");
        myTable.Columns.Add("Number");

        myTable.Rows.Add("A", 500);
        myTable.Rows.Add("B", 400);
        myTable.Rows.Add("C", 500);
        myTable.Rows.Add("D", 600);
        myTable.Rows.Add("E", 300);
        myTable.Rows.Add("F", 200);

        return myTable;
    }

    private void GenerateButtonClicked(object sender, RoutedEventArgs e)
    {
        var myGeneratedTable = GenerateMyTable();

        myDataGrid.DataContext = myGeneratedTable;

        myChartSeries.DataContext = myGeneratedTable; // Calling this throws "Object reference not set to an instance of an object" exception
    }
}

© Stack Overflow or respective owner

Related posts about databinding

Related posts about datatable