We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy.
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

Sorting grid with Dictionary backing throwing an error in 15.2

Thread ID:

Created:

Updated:

Platform:

Replies:

130701 May 26,2017 03:48 PM UTC May 29,2017 11:15 AM UTC Xamarin.iOS 1
loading
Tags: SfDataGrid
Clint Anderson
Asked On May 26, 2017 03:48 PM UTC

My grid's datasource is a Dictionary<string, object> which based on an example, I have wrapped in my DynamicModel class.  So my ViewModel looks something like this:

public class ViewModel : NotificationObject{ 
                ...
     public IncrementalList<DynamicModel> DynamicCollection;
     ... 
} 

and my wrapper for my Dictionary<string,object> looks like this:

public class DynamicModel : INotifyPropertyChanged{ 
                    public Dictionary<string, object> _values;        
                    ...
        public Dictionary<string, object> Values{
            get {
                return _values;
            }
            set {
                _values = value;
            }

        }
        public DynamicModel(){
            this._values = new Dictionary<string, object>();
       }

When I create a GridTextColumn, the mapping is set up like this:

MappingName = "Values[" + colProperty + "]"

Where colProperty is the key for the value in the dictionary.

This was all working fine in version 15.1, but when I update to 15.2, sorting no longer works. Now, when I attempt to sort, it throws an error: 


System.ArgumentException: 'Values[FILENAME]' is not a member of type 'IosGold.DynamicModel'

  at System.Linq.Expressions.Expression.PropertyOrField (System.Linq.Expressions.Expression expression, System.String propertyOrFieldName) [0x00097] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.8.0.175/src/mono/mcs/class/dlr/


Is there something that I need to change to make this compatible again, or is this just a bug in this version of the library?

Sivaraman Sivagurunathan [Syncfusion]
Replied On May 29, 2017 11:15 AM UTC

Hi Clint Anderson, 
 
Thanks for your update. 
 
We are able to reproduce the issue in our side and is because we have changed the behavior of the sorting internally. Earlier we will be applying sorting based on the values in the columns but now we have changed it based on the objects of the columns to facilitate custom filtering and sorting comparing the row data objects. However you can overcome the sorting issue in sample level by overriding the GridQueryableCollectionViewWrapper and setting the ItemSource for the grid as shown in the below code example. 
 
Note: 
 
You need to set the ItemSource for the datagrid after populating data to the underlying collection as shown in the below code example. 
 
Work around: 
 
//QueryableViewExt.cs 
public class QueryableViewExt : GridQueryableCollectionViewWrapper 
{ 
    public QueryableViewExt(IEnumerable source, SfDataGrid grid) : base(source, grid) 
    { 
 
    } 
 
    public override Expression<Func<string, object, object>> GetExpressionFunc(string propertyName, DataOperation operation = DataOperation.Default, DataReflectionMode reflectionMode = DataReflectionMode.Default) 
    { 
        Expression<Func<string, object, object>> exp = base.GetExpressionFunc(propertyName, operation, reflectionMode); 
        if (exp == null) 
        { 
            Func<string, object, object> func; 
            func = (propertyname, record) => 
             { 
                 var provider = this.GetPropertyAccessProvider(); 
                 return provider.GetValue(record, propertyName); 
             }; 
            exp = (propertyname, record) => func(propertyName, record); 
        } 
        return exp; 
    } 
} 
 
 
//MainActivity.cs 
 
public GettingStartedViewController () 
{ 
    grid = new SfDataGrid(); 
            viewModel = new ViewModel(); 
            grid.AllowSorting = true; 
    grid.AutoGenerateColumns = false; 
    grid.ColumnSizer = ColumnSizer.Star; 
    viewModel.PopulateData(); 
    grid.ItemsSource = new QueryableViewExt(viewModel, grid); 
            grid.GridTapped += Grid_GridTapped; 
    grid.Columns.Add(new GridTextColumn() 
    { 
        HeaderText = "Order ID", 
        MappingName = "Values[orderID]", 
        LineBreakMode = UILineBreakMode.WordWrap, 
        TextAlignment = UITextAlignment.Left, 
        HeaderTextAlignment = UITextAlignment.Center, 
    }); 
 
    grid.Columns.Add(new GridTextColumn() 
    { 
        HeaderText = "Customer ID", 
        MappingName = "Values[customerID]", 
        LineBreakMode = UILineBreakMode.WordWrap, 
        TextAlignment = UITextAlignment.Left, 
        HeaderTextAlignment = UITextAlignment.Center, 
    }); 
 
    grid.Columns.Add(new GridTextColumn() 
    { 
        HeaderText = "First Name", 
        MappingName = "Values[firstName]", 
        LineBreakMode = UILineBreakMode.WordWrap, 
        TextAlignment = UITextAlignment.Left, 
        HeaderTextAlignment = UITextAlignment.Center, 
    }); 
 
    grid.Columns.Add(new GridTextColumn() 
    { 
        HeaderText = "Last Name", 
        MappingName = "Values[lastName]", 
        LineBreakMode = UILineBreakMode.WordWrap, 
        TextAlignment = UITextAlignment.Left, 
        HeaderTextAlignment = UITextAlignment.Center, 
    }); 
 
    grid.Columns.Add(new GridTextColumn() 
    { 
        HeaderText = "City", 
        MappingName = "Values[city]", 
        LineBreakMode = UILineBreakMode.WordWrap, 
        TextAlignment = UITextAlignment.Left, 
        HeaderTextAlignment = UITextAlignment.Center, 
    }); 
    grid.Columns.Add(new GridTextColumn() 
            { 
                        HeaderText = "GroupProperty", 
                        MappingName = "GroupProperty", 
                        Width = 0 
            }); 
    viewModel.RefreshGroup("firstName"); 
    this.View.Add(grid);             
} 
 
 
We have modified your sample which contains the fix for the reported issue and you can download the same from the below link. 
 
Regards,

Sivaraman 


CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

;