RadControls for WPF Q3 2009.
I have an ObservableCollection<T> with a class that implements INotifyPropertyChanged, bound to a RadGridView.
A column on the RadGridView implements a GridViewDataColumn for summing and displaying in a footer.
The Sum, shows up correctly upon running the application, however whenever a cell is edited, the sum does not update to reflect the new figure.
Am I supposed to invoke something to update the column sum?
Additionally, Columns are right aligned. Upon entering a leaving the cell, the data is left aligned. Is this a bug?
I have an ObservableCollection<T> with a class that implements INotifyPropertyChanged, bound to a RadGridView.
A column on the RadGridView implements a GridViewDataColumn for summing and displaying in a footer.
The Sum, shows up correctly upon running the application, however whenever a cell is edited, the sum does not update to reflect the new figure.
Am I supposed to invoke something to update the column sum?
Additionally, Columns are right aligned. Upon entering a leaving the cell, the data is left aligned. Is this a bug?
| using System; |
| using System.ComponentModel; |
| public class Product : INotifyPropertyChanged |
| { |
| #region fields |
| private string _id; |
| private string _name; |
| private double _unitPrice; |
| private DateTime _date; |
| #endregion |
| #region ctor |
| public Product() |
| { |
| } |
| public Product(string id, string name, double unitPrice, DateTime date) |
| { |
| _id = id; |
| _name = name; |
| _unitPrice = unitPrice; |
| _date = date; |
| } |
| #endregion |
| #region properties |
| public string ID |
| { |
| get { return _id; } |
| set |
| { |
| _id = value; |
| NotifyPropertyChanged("ID"); |
| } |
| } |
| public string Name |
| { |
| get { return _name; } |
| set |
| { |
| _name = value; |
| NotifyPropertyChanged("Name"); |
| } |
| } |
| public double UnitPrice |
| { |
| get { return _unitPrice; } |
| set |
| { |
| _unitPrice = value; |
| NotifyPropertyChanged("UnitPrice"); |
| } |
| } |
| public DateTime Date |
| { |
| get { return _date; } |
| set |
| { |
| _date = value; |
| NotifyPropertyChanged("Date"); |
| } |
| } |
| #endregion |
| #region Interface INotifyPropertyChanged |
| public event PropertyChangedEventHandler PropertyChanged; |
| private void NotifyPropertyChanged(string propertyName) |
| { |
| if (PropertyChanged != null) |
| PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); |
| } |
| #endregion |
| } |
| public Window6() |
| { |
| InitializeComponent(); |
| ObservableCollection<Product> list2 = new ObservableCollection<Product>(); |
| list2.Add(new Product("A", "Apple", 11.23, DateTime.Now)); |
| list2.Add(new Product("B", "Banana", 1.123, DateTime.Now)); |
| list2.Add(new Product("C", "Cherry", 112.3, DateTime.Now)); |
| list2.Add(new Product("D", "Durian", 12.3, DateTime.Now)); |
| list2.Add(new Product("E", "Eggplant", 1.23, DateTime.Now)); |
| list2.Add(new Product("F", "Fireberry", .123, DateTime.Now)); |
| list2.Add(new Product("G", "Golfball", 1.12, DateTime.Now)); |
| list2.Add(new Product("H", "Help", 1.13, DateTime.Now)); |
| Binding binding = new Binding(); |
| binding.Source = list2; |
| RadGridView1.SetBinding(RadGridView.ItemsSourceProperty, binding); |
| } |
| <grid:RadGridView Grid.Row="1" Margin="0,0,0,1" x:Name="RadGridView1" ItemsSource="{Binding RandomProducts}" ShowColumnFooters="True" ShowGroupFooters="True" Width="900" |
| AutoGenerateColumns="False" IsReadOnly="False" CanUserFreezeColumns="False"> |
| <grid:RadGridView.Columns> |
| <grid:GridViewDataColumn Header="ID" DataMemberBinding="{Binding ID}"> |
| <grid:GridViewDataColumn.AggregateFunctions> |
| <data:CountFunction Caption="Count: " /> |
| </grid:GridViewDataColumn.AggregateFunctions> |
| </grid:GridViewDataColumn> |
| <grid:GridViewDataColumn Header="Name" DataMemberBinding="{Binding Name}"> |
| <grid:GridViewDataColumn.AggregateFunctions> |
| <data:MinFunction FunctionName="MinUnitPrice" ResultFormatString="{}{0:c}" SourceField="UnitPrice" /> |
| </grid:GridViewDataColumn.AggregateFunctions> |
| <grid:GridViewDataColumn.Footer> |
| <Button Content="Show smallest UnitPrice" Click="Button_Click" Margin="5,0" /> |
| </grid:GridViewDataColumn.Footer> |
| </grid:GridViewDataColumn> |
| <grid:GridViewDataColumn Width="200" Header="Unit Price" TextAlignment="Right" DataMemberBinding="{Binding UnitPrice}" DataFormatString="{}{0:c}"> |
| <grid:GridViewDataColumn.AggregateFunctions> |
| <data:SumFunction Caption="Sum: " ResultFormatString="{}{0:c}" SourceField="UnitPrice" /> |
| <data:AverageFunction Caption="Average: " ResultFormatString="{}{0:c}" SourceField="UnitPrice" /> |
| </grid:GridViewDataColumn.AggregateFunctions> |
| <grid:GridViewDataColumn.Footer> |
| <StackPanel Orientation="Vertical" Margin="5,0"> |
| <TextBlock Text="Custom footer with aggregates:" Margin="0,0,0,2" /> |
| <gridView:AggregateResultsList ItemsSource="{Binding}" VerticalAlignment="Center" Grid.Column="4"> |
| <ItemsControl.ItemTemplate> |
| <DataTemplate> |
| <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> |
| <TextBlock VerticalAlignment="Center" Text="{Binding Caption}" /> |
| <TextBlock VerticalAlignment="Center" Text="{Binding FormattedValue}" /> |
| </StackPanel> |
| </DataTemplate> |
| </ItemsControl.ItemTemplate> |
| <ItemsControl.ItemsPanel> |
| <ItemsPanelTemplate> |
| <StackPanel Orientation="Vertical" /> |
| </ItemsPanelTemplate> |
| </ItemsControl.ItemsPanel> |
| </gridView:AggregateResultsList> |
| </StackPanel> |
| </grid:GridViewDataColumn.Footer> |
| <grid:GridViewDataColumn.GroupFooterTemplate> |
| <DataTemplate> |
| <StackPanel Orientation="Vertical" Margin="5,0"> |
| <TextBlock Text="Custom footer with aggregates:" Margin="0,0,0,2" /> |
| <gridView:AggregateResultsList ItemsSource="{Binding}" VerticalAlignment="Center" Grid.Column="4"> |
| <ItemsControl.ItemTemplate> |
| <DataTemplate> |
| <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> |
| <TextBlock VerticalAlignment="Center" Text="{Binding Caption}" /> |
| <TextBlock VerticalAlignment="Center" Text="{Binding FormattedValue}" /> |
| </StackPanel> |
| </DataTemplate> |
| </ItemsControl.ItemTemplate> |
| <ItemsControl.ItemsPanel> |
| <ItemsPanelTemplate> |
| <StackPanel Orientation="Vertical" /> |
| </ItemsPanelTemplate> |
| </ItemsControl.ItemsPanel> |
| </gridView:AggregateResultsList> |
| </StackPanel> |
| </DataTemplate> |
| </grid:GridViewDataColumn.GroupFooterTemplate> |
| </grid:GridViewDataColumn> |
| <grid:GridViewDataColumn Width="200" Header="Date" DataMemberBinding="{Binding Date}" DataFormatString="{}{0:d}" TextAlignment="Right"> |
| <grid:GridViewDataColumn.AggregateFunctions> |
| <data:MinFunction Caption="Min: " ResultFormatString="{}{0:d}" SourceField="Date" /> |
| <data:MaxFunction Caption="Max: " ResultFormatString="{}{0:d}" SourceField="Date" /> |
| </grid:GridViewDataColumn.AggregateFunctions> |
| </grid:GridViewDataColumn> |
| </grid:RadGridView.Columns> |
| </grid:RadGridView> |
