Use Aggregrate Functions with AutoGenerateColumns set to True

4 posts, 0 answers
  1. David Cecil
    David Cecil avatar
    11 posts
    Member since:
    Aug 2009

    Posted 14 Jan 2010 Link to this post

    Hello,

    Is it possible to use the AggregateFunctions CountFunction with AutoGenerateColumns set to True?  We have a datasource we would like to connect to without defining each columns in xaml or code.  In every example I've always seen the AutoGenerateColumns set to false.  As it stands, if I do the same I will either endup with a "blank" column or duplicate.

    Kind regards
  2. Milan
    Admin
    Milan avatar
    1989 posts

    Posted 15 Jan 2010 Link to this post

    Hello David Cecil,

    There is no problem to define aggregate functions for autogenerated columns. RadGridView exposes an event called AutoGeneratingColumn which can be used to configure the autogenerated columns. You could try something like:

    public Window1()
    {
        InitializeComponent();
      
        this.playersGrid.ItemsSource = Club.GetPlayers();
        this.playersGrid.AutoGeneratingColumn += new System.EventHandler<GridViewAutoGeneratingColumnEventArgs>(playersGrid_AutoGeneratingColumn);
    }
      
    void playersGrid_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
    {
        GridViewDataColumn column = e.Column as GridViewDataColumn;
      
        if (column != null && column.DataMemberBinding.Path.Path == "Number")
        {
            column.AggregateFunctions.Add(new CountFunction() { Caption = "Count" });
        }
    }


    Best wishes,
    Milan
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
  3. Adam
    Adam avatar
    25 posts
    Member since:
    Mar 2012

    Posted 06 Sep 2013 Link to this post



    Hello Telerik!,

        I have a similar problem - except that I am using multiple elements within my columns and attempting to show a sum aggregate function(s) on singular properties.
    DataTemplate week = new DataTemplate();
     
    FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(DockPanel));
    spFactory.SetValue(DockPanel.LastChildFillProperty, false);
    spFactory.SetValue(DockPanel.DataContextProperty, new Binding(e.Column.UniqueName));
     
    FrameworkElementFactory quantity = new FrameworkElementFactory(typeof(TextBlock));
    quantity.SetBinding(TextBlock.TextProperty, new Binding("Quantity") { StringFormat = "F2" });
    quantity.SetValue(TextBlock.WidthProperty, 70D);
    quantity.SetValue(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center);
    quantity.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Right);
    quantity.SetValue(TextBlock.PaddingProperty, new Thickness(0, 0, 3, 0));
    spFactory.AppendChild(quantity);
     
    FrameworkElementFactory value = new FrameworkElementFactory(typeof(TextBlock));
    value.SetBinding(TextBlock.TextProperty, new Binding("Cost") { StringFormat = "c" });
    value.SetValue(TextBlock.WidthProperty, 80D);
    value.SetValue(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center);
    value.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Right);
    value.SetValue(TextBlock.PaddingProperty, new Thickness(0, 0, 3, 0));
    spFactory.AppendChild(value);
     
    FrameworkElementFactory rateIndicator = new FrameworkElementFactory(typeof(Image));
    rateIndicator.SetBinding(Image.SourceProperty, new Binding("RateIndicator") { Converter = new Convertors.RateIndicatorImageSource() });
    rateIndicator.SetBinding(TextBlock.ToolTipProperty, new Binding("RateIndicator") { Converter = new Convertors.RateIndicatorToolTip() });
    rateIndicator.SetValue(Image.MarginProperty, new Thickness(3, -1, 0, 0));
    rateIndicator.SetValue(Image.HeightProperty, 16D);
    rateIndicator.SetValue(Image.WidthProperty, 16D);
    spFactory.AppendChild(rateIndicator);
     
    week.VisualTree = spFactory;
    week.Seal();
     
    e.Column.CellTemplate = week;
     
    e.Column.IsFilterable = false;
    e.Column.IsSortable = false;
    e.Column.IsReadOnly = true;
    e.Column.FooterTextAlignment = TextAlignment.Right;
                     
    int weekNumber = System.Convert.ToInt32(e.Column.UniqueName.Replace("Week", "").Replace("Detail", ""));
     
    e.Column.Header = new HoursCostHeader(((PlantReportingViewModel)this.DataContext).StartDate.Value.AddDays((weekNumber - 1) * 7),
    (((PlantReportingViewModel)this.DataContext).StartWeekNo.Value + (weekNumber - 1)));
     
    ((Telerik.Windows.Controls.GridViewDataColumn)e.Column)
        .AggregateFunctions.Add(new Telerik.Windows.Data.SumFunction()
            { SourceField = String.Format("{0}.Cost", e.Column.UniqueName), SourceFieldType = typeof(Decimal) });

     ... However, I am getting the error;
    No generic method 'Sum' on type 'System.Linq.Enumerable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
    ... which must be because the AggregateFunction binding cannot be located with a straight string assignment (?), but I cannot think how to access the specific dataset which is an ObservableCollection<dynamic>

    What am I doing wrong? - with regards to the AggregateFunction, ofcourse!
  4. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 11 Sep 2013 Link to this post

    Hi,

    I have tried applying an aggregate function with a SourceField that is a nested property. I did not get it to work and no error appeared.

    I can see that you set the Binding for your TextBlock to "Cost". Does it work if you assign the SourceField like so:

    ...((Telerik.Windows.Controls.GridViewDataColumn)e.Column)
        .AggregateFunctions.Add(new Telerik.Windows.Data.SumFunction()
            { SourceField = "Cost", SourceFieldType = typeof(Decimal) });

    Generally, in case you cannot use built-in SumFunction, we suggest using generic aggregate function similar to the "Calculated Column" example on our WPF demos. You can also check the "Custom Aggregate Function" demo.

    Regards,
    Didie
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
Back to Top