Syncfusion Xamarin.Forms SfDataGrid – Binding to List<Dictionary<,>>

corresponding syncfusion forums post

Binding to Collection<Dictionary<,>> can be accomplished but doesn’t appear to be well documented… this WPF SfDataGrid doc gave the clue.

The basic trick is to set the SfDataGrid’s column.MappingName = “Fields[FieldName]”;
where Fields is a Dictionary property on your DictionaryWrapper class.

I couldn’t get List<Dictionary<string, object>> working directly without the wrapper class “hiding” the dictionary from what I think is an SfDataGrid bug. The app crash exception call stack ultimately winds up on an invalid Linq related get_Item() call.

Below is sample working code including “SimpleTable” wrapper for List and Newtonsoft type converter for deserializing Json “table” directly into this datastructure… this facilitates delivery of tabular resultsets from web api’s… see my SqlClientHelpers.ToJson method as one implementation that works succinctly within Azure Functions for example.

FYI, I believe there is also a bug with SfDataGrid column sorting logic when bound to this kind of Dictionary, a non-fatal exception fires. I worked around by implementing grid.SortColumnsChanging.

Sample Deserialize call:

Binding sample with crucial MappingName syntax:

SimpleTable.cs

  • Kishor Upare

    It is really great post. But sorting, grouping, filtering,etc not working in sfdatagrid in above case. will be great help if you suggest/post code to achieve them. It is very difficult to implement above feature row by row in grid.

    • help me keep an eye on that Syncfusion forum link at the top of this post… SF tech support indicated they’re working on providing this kind of sample… i’m assuming they’ll have to fix a few bugs on the way there so i’m not so inclined to put much into it until i hear they’ve given it some attention

      here’s that link again: https://www.syncfusion.com/kb/6643/how-to-bind-dictionary-to-column-in-sfdatagrid

      • awesome! they finally posted the missing bits for sorting just this morning … the trick is implementing GridQueryableCollectionViewWrapper around the list of dictionary rows, which apparently shows the grid how to properly retrieve values from this data structure… very cool to see how this hangs together

    • awesome! they finally just posted the sorting sample code this morning… the trick is wrapping the list of dictionaries with a special “GridQueryableCollectionViewWrapper” which clearly provides the grid with a standardized way to retrieve values from custom data-structures like this… very enlightening to see how this hangs together