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