How to bind DataTable to Chart series?
- by user175908
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
}
}