How to customize StringFormat according to columns/rows

5 posts, 0 answers
  1. Thomas
    Thomas avatar
    11 posts
    Member since:
    Jul 2017

    Posted 22 Oct 2018 Link to this post

    Hello,

     

    I work with version 2016 R3.

     

    I have a series of Data like this

    DataType | DataPoint | Value

    I displayed correctly all values with either DataType and DataPoint in column or row

     

    Now I want to use different string format according to which DataType it corresponds.

    I found the StringFormatSelector on the PropertyAggregateDescription and I thought I could use it like any [...]Selector but I don't have in input of the SelectStringFormat method the CellAggregateValue associated.

     

    For now the only way to do that is by using a converter on the CellTemplateSelector of the PivotGrid

    (I'm currently implementing it, it's not working as expected yet)

     

    Is there a best way to achieve different string format according to a celldata ?

     

    Regards

    Thomas

     

  2. Thomas
    Thomas avatar
    11 posts
    Member since:
    Jul 2017

    Posted 24 Oct 2018 Link to this post

    Hello

    Here is an update with my tests

    The solution with a converter in the CellTemplateSelector is working but only for to display values in the PivotGrid.

     

    If I export the PivotGrid in Excel it doesn't work.

     

    So I think the StringFormatSelector of the PropertyAggregateDescription is the solution but how can I use it ?

     

    Thank you

    Regards,

    Thomas

  3. Dinko
    Admin
    Dinko avatar
    1127 posts

    Posted 25 Oct 2018 Link to this post

    Hi Thomas,

    The StringFormatSelector class doesn't provide functionality to check the current cell value which is applied. Overriding the SelectStringFormat() method will return one format for all cell values in the specified PropertyAggregateDescription. The SelectStringFormat() can be used the following way.
    <pivot:PropertyAggregateDescription PropertyName="Net"   >
        <pivot:PropertyAggregateDescription.StringFormatSelector>
            <local:MyStringFormatSelector PropertyName="Net" />
        </pivot:PropertyAggregateDescription.StringFormatSelector>                 
    </pivot:PropertyAggregateDescription>
     
    <pivot:PropertyAggregateDescription PropertyName="Quantity" >
        <pivot:PropertyAggregateDescription.StringFormatSelector>
            <local:MyStringFormatSelector  PropertyName="Quantity" />
        </pivot:PropertyAggregateDescription.StringFormatSelector>
    </pivot:PropertyAggregateDescription>

    public class MyStringFormatSelector : StringFormatSelector
    {
        public string PropertyName { get; set; }
        protected override string SelectStringFormat()
        {
            if(PropertyName == "Net")
            {
                return "$$#.###";
            }
            else
            {
                return "**#.###";
            }          
        }
     
        protected override void CloneCore(Cloneable source)
        {
            var original = (MyStringFormatSelector)source;
            this.PropertyName = original.PropertyName;
        }
     
        protected override Cloneable CreateInstanceCore()
        {
            return new MyStringFormatSelector();
        }
    }

    Regards,
    Dinko
    Progress Telerik
    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
  4. Thomas
    Thomas avatar
    11 posts
    Member since:
    Jul 2017

    Posted 25 Oct 2018 Link to this post

    Hello,

     

    Thank you for you reply

     

    We found a better solution that works for the display, the excel export and the Copy/Paste feature

     

    We added in our data a new property that represent the value formatted as a string

    DataType | DataPoint | Value | ValueFormatted

     

    Then because we only have 1 value for the rows and columns, we specified an AggregateFunction that return directly the object read from the our dataSource (here our string formatted) with this code below and a custom AggregateFunction using this AggregateValue

     

    public class ValueAggregate : AggregateValue
    {
        private object _value;
     
        protected override object GetValueOverride()
        {
            return _value;
        }
     
        protected override void AccumulateOverride(object value)
        {
            _value = value;
        }
     
        protected override void MergeOverride(AggregateValue childAggregate)
        {
        }
    }

     

    Then everything works as planned.

     

    We couldn't use the StringFormatSelector because we only had one PropertyAggregateDescription for different string format.

     

    Thank you.

    Hervouet Thomas

  5. Dinko
    Admin
    Dinko avatar
    1127 posts

    Posted 26 Oct 2018 Link to this post

    Hello Thomas,

    I am happy to hear that you have found a solution which fits in your main application. And thank you for sharing it. This way the community can benefit from it.

    Regards,
    Dinko
    Progress Telerik
    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
Back to Top