- Home
- Forum
- Xamarin.Forms
- Data Grid mapping to xaml with List of Dictionaries as the ItemsSource collection
Data Grid mapping to xaml with List of Dictionaries as the ItemsSource collection
Thanks for contacting Syncfusion Support.
Regarding “To set a Dictionary as the ItemsSource of the SfDataGrid”, it is not possible as the dictionary provides only two properties Key and Value which will be considered as the MappingName for the SfDataGrid columns. Hence only two columns will be created when a dictionary is set as itemssource to the SfDataGrid.
With regard to“Displaying items in the grid when we columns arent known at compile time”. Xamarin.Forms do not have a support to Dynamic binding. Hence it is not supported in SfDataGrid. Please refer to the below link for further details.
Bugzilla link: https://bugzilla.xamarin.com/show_bug.cgi?id=37071
Regards,
Dharmendar
In case helpful for others searching here... binding to Collection<Dictionary<,>> can be accomplished but doesn't appear to be well documented... this WPF SfDataGrid doc gave clue.
The basic trick is to set the SfDataGrid's column.MappingName = "Fields[FieldName]";
where Fields is a Dictionary property on your List
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.
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:
var data = "[{\"Source\":\"Web\",\"Batch Id\":1}, {\"Source\":\"Manual\",\"Batch Id\":2}]";
var table = JsonConvert.DeserializeObject<SimpleTable>(data);
Binding sample with crucial MappingName syntax:
grid.ItemsSource = table;
grid.Columns.Add(new GridTextColumn()
{
HeaderText = "Source",
MappingName = "Vals[Source]" // **** HERE'S THE KICKER ****
});
SimpleTable.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace DataHelpers
{
[JsonConverter(typeof(DictRow_DictDeserializer))]
public class DictRow
{
public Dictionary<string, object> Vals { get; set; }
public DictRow(Dictionary<string, object> dict) { Vals = dict; }
}
public class SimpleTable : List<DictRow>
{
public SimpleTable(IEnumerable<DictRow> list) : base(list) { }
}
public class DictRow_DictDeserializer : JsonConverter
{
public override bool CanRead => true;
public override bool CanWrite => false;
public override bool CanConvert(Type objectType) => objectType == typeof(Dictionary<string, object>);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return new DictRow(serializer.Deserialize<Dictionary<string, object>>(reader));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotSupportedException();
}
}
}
I am also interested in "sample for Knowledge Base with sorting,grouping,filtering,etc". Please suggest date to get this available,if you can.
Thanks for the sample! The need for GridQueryableCollectionViewWrapper looks to be very enlightening.
FYI for other folks copying this code, the JsonConverter approach in the code I provided looks to save an extra iteration through the rows of Json data vs the PopulateData method in the Syncfusion sample.
As Beej stated, you can achieve your requirement of conditional styling and column template customizations through the links he had directed. However regarding your query please refer the below UG links to achieve your requirements,
1. GroupExpandCollapse : https://help.syncfusion.com/xamarin/sfdatagrid/grouping#expand-groups-while-grouping
2. MultiColumnGrouping : Currently not available in grid. You can expect the feature to be available in any of our upcoming releases post 2017 Vol 3 Main Release
4. Conditional Formatting : As Beej stated, https://help.syncfusion.com/xamarin/sfdatagrid/conditional-styles
5. PullToRefresh : https://help.syncfusion.com/xamarin/sfdatagrid/pull-to-refresh
6. Column DragAndDrop : https://help.syncfusion.com/xamarin/sfdatagrid/columndraganddrop
7. Exporting : https://help.syncfusion.com/xamarin/sfdatagrid/exporting
8. FreezePanes : https://help.syncfusion.com/xamarin/sfdatagrid/freeze-panes
We will also be publishing a sample with all features of datagrid included shortly via a KB document.
Regards,
Vimal Prabhu
Please find below my remarks. Only 7 No point is throwing exception, rest we can achieve....
1. GroupExpandCollapse : Done. work great if we set AllowGroupExpandCollapse = true;
2. MultiColumnGrouping : Ok
3. Summary of columns : Done
4. Conditional Formatting : Done
5. PullToRefresh : Done
6. Column DragAndDrop : Done
7. Exporting : throws exception as explain below
8. FreezePanes : Done
But throws exception for Exporting feature. I have use code snapshot to export in excel same as give in
https://help.syncfusion.com/xamarin/sfdatagrid/exporting.but it throws exception as "Unhandled Exception:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: firstRow or lastRow occurred"
Please guide me on this.
Thanks for the update. We have prepared a sample based on your requirements by loading a List of Dictionaries as ItemsSource for SfDataGrid with exporting to PDF and Excel support provided via button click and we were not able to experience any crash. Please refer the sample from the below link to check and overcome the reported crash.
Sample Link : http://www.syncfusion.com/downloads/support/forum/125388/ze/SfDataGridTest-379781147
Regards,
Vimal Prabhu
Thanks. Please check attached sample where you will get the mentioned issue. I have crossed check your provided sample this work great but for my sample it crashes.
Attachment: Export_To_Excel_7ab80814.rar
- 17 Replies
- 7 Participants
-
HA Harsha
- Aug 12, 2016 07:30 AM UTC
- Aug 22, 2017 10:26 AM UTC