The following example demonstrates how to span cells across a range of values.
XAML |
Copy Code |
---|---|
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"> <Grid.Resources> <xcdg:DataGridCollectionViewSource x:Key="cvs_orders" Source="{Binding Source={x:Static Application.Current}, Path=Orders}" /> <local:CustomSpannedCellSelector x:Key="spannedCellSelector" /> </Grid.Resources> <xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvs_orders}}" SpannedCellSelector="{StaticResource spannedCellSelector}"> <xcdg:DataGridControl.View> <xcdg:TableView AllowCellSpanning="True" /> </xcdg:DataGridControl.View> <xcdg:DataGridControl.Columns> <xcdg:Column FieldName="Freight" CellSpanningDirection="Row" /> </xcdg:DataGridControl.Columns> </xcdg:DataGridControl> </Grid> |
C# |
Copy Code |
---|---|
public sealed class CustomSpannedCellSelector : SpannedCellSelector { private const decimal Range = 10m; public override bool CanMerge(SpannedCellFragment x, SpannedCellFragment y) { if ((x.Column == y.Column) && (x.Column.FieldName == "Freight")) { var xBound = this.GetLowerBound(x); var yBound = this.GetLowerBound(y); return xBound.HasValue && yBound.HasValue && (xBound.Value == yBound.Value); } return false; } public override object SelectContent(IEnumerable<SpannedCellFragment> fragments) { var first = fragments.FirstOrDefault(); var bound = (first != null) ? this.GetLowerBound(first) : null; if (!bound.HasValue) return null; return string.Format("{0} - {1}", bound.Value, bound.Value + Range); } private decimal? GetLowerBound(SpannedCellFragment x) { var content = x.Content; if (!(content is decimal)) return null; var value = (decimal)content; return Math.Floor(value / Range) * Range; } } |